日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python - 函数

發布時間:2023/12/20 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python - 函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在許多編程語言中都存在函數,python也不例外。

函數是將單一或者相關聯的功能打包的代碼段。函數將代碼打包,外界只需要調用接口,不必知道其實現過程

函數的意義是代碼復用,一次定義多次使用,不僅減輕了代碼工作者的作業,而且使得程序的架構更加完善,更改,維護得到提升,擴展性更強(不用類的情況下)

python中的函數分為 內置函數 和 用戶自定義函數。

內置函數此處不講,下面我們看看用戶自定義函數

在python中,函數名的命名符合變量命名規則,一般就用駝峰式或用下劃線連接,如下:

1 >>> 2 >>> def MyFirstFunc(): #駝峰命名,這樣可以按照大小寫區分一個單詞,讀懂函數名的意思 3 pass 4 #這里定義的空函數 5 >>> 6 >>> def my_first_func(): #用'_'連接,個人覺得更清晰,所以一般自用這種方式命名函數,用駝峰式命名類 7 pass 8 9 >>>

python定義函數的固定格式:

? ? def function_name([arg1[,arg2...]]):

    return

說明:

? ? ?def: 是 define function ,定義函數說明,python解釋器在讀到 def 時,就會把其后的代碼塊當成一個函數,此時python解釋器不會把函數的代碼

讀到內存中,跳過整個代碼塊繼續讀后面的代碼,當函數被調用時,python解釋器才會去解釋執行函數的代碼塊。

? ? ?function_name: ?用戶自定義的函數名,注意不要與python里面存在的函數重名,否則相當于重寫內置函數,若不需要,盡量避免。在定義完成后,

函數名就相當于函數在內存中地址的一個引用,此時若直接打印函數名,則會返回函數的內存地址

? ? ?() :在定義時的固定格式,里面可以沒有參數,也可以有參數(參數可以是python中各種數據結構)。在調用時,函數名() 表示執行函數,所以經常在

給函數名創建引用后,給引用加個()就能執行函數

? ? ?[arg1[,arg2...]] : 表示可選參數

? ? ?' : ' ? :固定寫法,指明下面是屬于當前行的代碼塊

? ? ?return : 函數中的出口。當函數在執行到return時,當前函數會結束執行(后面的代碼將不會執行),并把return后面的值(或表達式)返回,此時可以用

一個變量來接收函數的返回值,當一個函數中沒有定義return時,這個函數也有返回值,默認返回None

1 >>> 2 >>> def hello(name): 3 print('hello %s' %name) 4 return 'hello everyone!' 5 print('just test') #沒有被執行 6 7 8 >>> h = hello('root') # hello() 表示調用函數 9 hello root 10 >>>h
11 'hello everyone!' 12 >>>

參數

? ? 在python中,參數是沒有類型的,類型是屬于對象。eg:

1 >>> 2 >>> l = [1,2,3,'a'] 3 >>> s = 'hello' 4 >>>

? ? 上面的 [1,2,3,'a'] 是List類型,'hello' 是String類型,而變量 l、s 是沒有類型的,她僅僅是一個對象的引用(一個指針),可以是 List 類型對象,

也可以指向 String 類型對象。

?

在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。

  • 不可變類型:變量賦值?a=5?后再賦值?a=10,這里實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當于新生成了a。

  • 可變類型:變量賦值?la=[1,2,3,4]?后再賦值?la[2]=5?則是將 list la 的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。

python 函數的參數傳遞:

  • 不可變類型:類似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個復制的對象,不會影響 a 本身。

  • 可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改后fun外部的la也會受影響

對上面傳遞不可變對象,eg:

1 >>> 2 >>> def test(a): 3 a = 10 # a 是一個局部變量,只是作用在函數test內部,出了函數,是不能調用它的 4 5 6 >>> b = 2 7 >>> test(b) #因為b=2,是numbers,不可變類型,所以這里傳遞的是值2,即test(2),所以函數里面的更改與 b 無關 8 >>> b 9 2 10 >>> a 11 Traceback (most recent call last): 12 File "<pyshell#40>", line 1, in <module> 13 a 14 NameError: name 'a' is not defined 15 >>>

對上面可變類型,eg:

1 >>> l = [1, 2, 3, 4, 5] 2 >>> def change_list(ol): 3 if len(ol) >= 3: 4 ol[2] = 'hello' 5 return 'just test' 6 else: 7 print('Not change everything') 8 9 10 >>> cl = change_list(l) 11 >>> l 12 [1, 2, 'hello', 4, 5] 13 >>> cl 14 'just test' 15 >>>

python 中一切都是對象,嚴格意義我們不能說 值傳遞 還是 引用傳遞,我們應該說傳 不可變對象 和傳 可變對象 。

傳遞給函數的參數也有很多種形式:

? ? 關鍵字參數: 實參位置與形參位置按順序一一對應

1 >>> 2 >>> def say_hello(name1,name2): 3 print('name1:',name1) 4 print('name2:',name2) 5 return 'just test' 6 7 >>> sh = say_hello('admin','root') 8 name1: admin 9 name2: root 10 >>> sh = say_hello('root','admin') 11 name1: root 12 name2: admin 13 >>>

? ? 指定參數: 類似鍵值對,對傳遞參數的位置順序無關

1 >>> 2 >>> def say_hello(name1,name2): 3 print('name1:',name1) 4 print('name2:',name2) 5 return 'just test' 6 7 >>> sh = say_hello(name2='admin',name1='root') 8 name1: root 9 name2: admin 10 >>>

? ? 默認參數: 在函數定義時為參數賦初值,防止后面沒輸入報錯 (注意:有默認值的參數放在最后)

1 >>> 2 >>> def user_info(name,age,hobbie='python'): 3 print('%s is %s year old and his hobbie is %s' %(name,age,hobbie)) 4 5 >>> ui = user_info('root',22,'php') 6 root is 22 year old and his hobbie is php 7 >>> ui = user_info('root',22) 8 root is 22 year old and his hobbie is python 9 >>> type(ui) 10 <class 'NoneType'> 11 >>>

? ?動態參數:參數可變,自動把傳入的參數轉換為元祖或字典

? ? ? ? 前面有一個*,如 *args 表示 會把接受到的 非鍵值對形式 的所有參數放進一個元祖里面

   前面有兩個*,如 **kwargs 表示 會把接收到的 鍵值對形式 的所有參數放進一個字典里面

? ? 注意:鍵值對形式的參數必須放在最后面?

1 >>> 2 >>> def collect_func(*args,**kwargs): 3 print('your input *args:',args) # * 只是指明后面的參數是(元祖)收集參數,并不是變量名的一部分,同理,** 也是(字典)收集參數 4 print('your input **kwargs:',kwargs) 5 6 7 >>> collect_func(1,2,'hello',[5,6],'a',name='root',age=22) 8 your input *args: (1, 2, 'hello', [5, 6], 'a') 9 your input **kwargs: {'name': 'root', 'age': 22} 10 11 >>> collect_func(1,2,'hello',age=22,[5,6],'a',name='root') 12 SyntaxError: positional argument follows keyword argument 13 >>>

變量作用域:

? ? ? ? 在函數內部定義的變量為局部變量,僅在函數內有用,出了函數就無法訪問。全局變量易于訪問,但不易于修改。

? ? ? ? 若要在函數內部定義一個全局變量,可用 global ?eg: 在函數內: ?global x = 10 ?(global會影響執行速度,并且不安全,不建議這樣用)

? ? 注意:

    在函數內部修改全局變量(如重新賦值),python會自動新建一個與全局變量名字相同的局部變量。全局變量存在于棧中,局部變量

? ? ? ? 存在于其他地方,所以互不影響

閉包:

? ? ? 閉包使用實例:裝飾器

? ? ? 注意:

? ? ? ? 使用函數時:在函數內部和程序其他部分可以使用的變量不同,在函數內應該只是使用通過參數傳遞進來的變量,而在函數外部,應該只使用接收函數返回值的變量

1 >>> 2 >>> def func1(): 3 print('func1正在被調用...') 4 def func2(): 5 print('func2正在被調用...') 6 return func2 7 8 >>> a = func1() 9 func1正在被調用... 10 >>> a() 11 func2正在被調用... 12 >>> func2() #不能直接從外部調用某個函數的內嵌函數 ,內嵌函數的作用域都在外部函數內 13 Traceback (most recent call last): 14 File "<pyshell#57>", line 1, in <module> 15 func2() 16 NameError: name 'func2' is not defined 17 >>>

匿名函數:

? ? lambda 表達式

? ? 作用:

   1、在使用函數時,用lambda表達式可以省下定義函數的過程

   ? 2、簡化代碼可讀性

1 >>> 2 >>> g = lambda x,y:x+y 3 >>> g(3,5) 4 8 5 >>>

? ? ? ? 說明:lambda后面空格,然后跟變量,有多個變量用 ' , ' 隔開,' : '是參數和函數體的分割點,' : '后面表示是函數體,

? ? 給lambda 表達式創建引用(一個指針) g ,使g指向lambda表達式的地址,再加上 () 執行lambda 表達式

過濾器:

  作用:篩選,把滿足條件的去掉,留下的生成一個filter object,可用list將其轉化

1 >>> 2 >>> #用法:filter(function or None , iterable) 3 >>> 4 >>> l = [1,0,3,'a',False,True] 5 >>> filter(None,l) 6 <filter object at 0x0000014EC44EBBA8> 7 >>> list(filter(None,l)) 8 [1, 3, 'a', True] 9 >>> 10 >>> #用filter寫一個篩選奇數的函數 11 >>> 12 >>> def singnal_num(x): #這里用lambda改進: lambda x:x%2 13 return x%2 14 15 >>> ls = range(10) 16 >>> show = filter(singnal_num,ls) #show = filter(lambda x:x%2,ls) 17 >>> list(show) 18 [1, 3, 5, 7, 9] 19 >>>

映射:map()

  將序列的每一個元素作為函數的參數(對應除默認參數外,只能傳遞一個)進行運算加工,直到把序列的所有元素加工完畢,返回所有加工后的元素構成的新序列

1 >>> 2 >>> #用法: map(規則函數,迭代器) 3 >>> 4 >>> m = map(lambda x:x*2,range(10)) 5 >>> list(m) 6 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 7 >>> 8 >>> [i for i in m] 9 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 10 >>>

?

  

轉載于:https://www.cnblogs.com/xtsec/p/6678340.html

總結

以上是生活随笔為你收集整理的python - 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。