国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python中函數參數設置及使用的學習筆記

Python中函數參數設置及使用的學習筆記

2020-08-22 09:15larry Python

這篇文章主要介紹了Python中函數參數設置及使用的學習筆記,記錄了一些Python2.x與Python3.x中函數參數相關的不同點,需要的朋友可以參考下

一、參數和共享引用:

?
1
2
3
4
5
6
7
8
9
In [56]: def changer(a,b):
  ....:   a=2
  ....:   b[0]='spam'
  ....:  
In [57]: X=1
In [59]: L=[1,2]
In [60]: changer(X,L)
In [61]: X,L
Out[61]: (1, ['spam', 2])

函數參數是賦值得來,在調用時通過變量實現共享對象,函數中對可變對象 參數的在遠處修能夠影響調用者。

避免可變參數修改:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
In [67]: X=1
In [68]: a=X
In [69]: a=2
In [70]: print(X)
1
In [71]: L=[1,2]
In [72]: b=L
In [73]: b[0]='spam'
In [74]: print(L)
['spam', 2]
In [75]: changer(X,L[:])
#不想要函數內部在原處的修改影響傳遞給它的對象,可以創建一個對象的拷貝
 
In [77]: changer(a,b)
In [78]: def changer(a,b):
....:   b=b[:]
#如果不想改變傳入對象,無論函數怎么調用,同樣可以在函數內部進行拷貝。
....:  
In [79]: a=2
In [80]: b[0]='spam'

二、特定參數匹配模型:

函數匹配語法:

Python中函數參數設置及使用的學習筆記

例子:

關鍵字參數:

?
1
2
3
4
5
In [2]: def f(a,b,c):print (a,b,c)
In [3]: f(1,2,3) #位置參數調用
(1, 2, 3)
In [4]: f(c=3,b=2,a=1) #關鍵字參數調用
(1, 2, 3)

默認參數:

?
1
2
3
4
5
6
7
8
9
10
11
In [5]: def f(a,b=2,c=3):print (a,b,c)
In [6]: f(1#給a賦值,b,c使用默認賦值
(1, 2, 3)
In [7]: f(a=1)
(1, 2, 3)
In [8]: f(1,4)
(1, 4, 3)
In [9]: f(1,4,5) #不適用默認值
(1, 4, 5)
In [10]: f(1,c=6) #a通過位置得到1,b使用默認值,c通過關鍵字得到6
(1, 2, 6)

三、任意參數:

1、收集參數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#*和**出現在函數定義或函數調用中。
 
In [11]: def f(*args):print (args)
In [12]: f()  #將所有位置相關的參數收集到一個新的元祖中
()
In [13]: f(1)
(1,)
In [14]: f(1,2,3,4)
(1, 2, 3, 4)
In [15]: def f(**args):print (args)
In [16]: f()
{}
In [17]: f(a=1,b=2) #**只對關鍵字參數有效
{'a': 1, 'b': 2}
 
In [19]: def f(a, *pargs,**kargs):print(a,pargs,kargs)
In [20]: f(1,2,3,4,5,6,x=1,y=2,z=3)
(1, (2, 3, 4, 5, 6), {'y': 2, 'x': 1, 'z': 3})

2、解包參數:

注意:不要混淆函數頭部或函數調用時*/**的語法:在頭部意味著收集任意數量的參數,而在調用時,它接駁任意數量的參數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
In [21]: def func(a,b,c,d):print(a,b,c,d)
In [22]: args=(1,2)
In [23]: args += (3,4)
In [24]: func(*args)
(1, 2, 3, 4)
In [25]: args={'a':1,'b':2,'c':3}
In [26]: args['d']=4
In [27]: func(**args)
(1, 2, 3, 4)
In [28]: func(*(1,2),**{'d':4,'c':4})
(1, 2, 4, 4)
In [30]: func(1,*(2,3),**{'d':4})
(1, 2, 3, 4)
In [31]: func(1,c=3,*(2,),**{'d':4})
(1, 2, 3, 4)
In [32]: func(1,*(2,3,),d=4)
(1, 2, 3, 4)
In [33]: func(1,*(2,),c=3,**{'d':4})
(1, 2, 3, 4)

3、應用函數通用性:

?
1
2
3
4
5
6
7
8
9
10
In [34]: def tracer(func,*pargs,**kargs):
  ....: print ('calling:',func.__name__)
  ....: return func(*pargs,**kargs)
  ....:
In [35]: def func(a,b,c,d):
  ....: return a+b+c+d
  ....: print (tracer(func,1,2,c=3,d=4))
  ....:
('calling:', 'func')
10

4、python3.X中廢棄apply內置函數

?
1
2
3
4
5
In [36]: pargs=(1,2)
In [37]: kargs={'a':3,'b':4}
In [41]: def echo(*args,**kargs):print (args,kargs)
In [42]: apply(echo,pargs,kargs)
((1, 2), {'a': 3, 'b': 4})

運用解包調用語法,替換:

?
1
2
3
4
In [43]: echo(*pargs,**kargs)
((1, 2), {'a': 3, 'b': 4})
In [44]: echo(0,c=5,*pargs,**kargs)
((0, 1, 2), {'a': 3, 'c': 5, 'b': 4})

四、python3.x中Keyword-only參數

python3.x把函數頭部的排序規則通用化了,允許我們指定keyword-only參數,即按照關鍵字傳遞并且不會由一個位置參數來填充的參數;參數*args之后,必須調用關鍵字語法來傳遞。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
In [1]: def kwonly(a,*b,c):
  ...: print(a,b,c)
In [2]: kwonly(1,2,c=3)
1 (2,) 3
In [3]: kwonly(a=1,c=3)
1 () 3
In [4]: kwonly(1,2,3) #c必須按照關鍵字傳遞
TypeError: kwonly() missing 1 required keyword-only argument: 'c'
 
In [6]: def kwonly(a,*,b,c):print(a,b,c)
In [7]: kwonly(1,c=3,b=2)
1 2 3
In [8]: kwonly(c=3,b=2,a=1)
1 2 3
In [9]: kwonly(1,2,3)
TypeError: kwonly() takes 1 positional argument but 3 were given

1、排序規則:

**不能獨自出現在參數中,如下都是錯誤用法:

?
1
2
3
4
5
6
7
8
9
10
11
12
In [11]: def kwonly(a,**pargs,b,c):
  ....:
 File "<ipython-input-11-177c37879903>", line 1
def kwonly(a,**pargs,b,c):  ^
SyntaxError: invalid syntax
 
In [13]: def kwonly(a,**,b,c):
  ....:
 File "<ipython-input-13-46041ada2700>", line 1
def kwonly(a,**,b,c):
  ^
SyntaxError: invalid syntax

也就是說一個函數頭部,keyword-only參數必須編寫在*args任意關鍵字形式之前,或者出現在args之前或者之后,并且可能包含在**args中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
In [14]: def f(a,*b,**d,c=6):print(a,b,c,d)
 File "<ipython-input-14-43c901fce151>", line 1
def f(a,*b,**d,c=6):print(a,b,c,d)
 ^
SyntaxError: invalid syntax
In [15]: def f(a,*b,c=6,**d):print(a,b,c,d) #keyword-only在*args之后,**args之前
In [16]: f(1,2,3,x=4,y=5)
1 (2, 3) 6 {'x': 4, 'y': 5}
 
In [20]: f(1,c=7,*(2,3),**dict(x=4,y=5)) #keyword-only在
1 (2, 3) 7 {'x': 4, 'y': 5}
In [21]: f(1,*(2,3),**dict(x=4,y=5,c=7))
1 (2, 3) 7 {'x': 4, 'y': 5}

2、為什么使用keyword-only參數?

很容易允許一個函數既接受任意多個要處理的位置參數,也接受作為關鍵字傳遞的配置選項, 可以減少代碼,如果沒有它的話,必須使用*args和**args,并且手動地檢查關鍵字。

3、min調用

編寫一個函數,能夠計算任意參數集合和任意對象數據類型集合中的最小值。

方法一:使用切片

?
1
2
3
4
5
6
7
In [23]: def min(*args):
  ....: res=args[0]
  ....: for arg in args[1:]:
  ....: if arg < res:
  ....: res = arg
  ....: return res
  ....:

 

方法二:讓python自動獲取,避免切片。

?
1
2
3
4
5
6
In [28]: def min2(first,*rest):
  ....: for arg in rest:
  ....: if arg < first:
  ....: first = arg
  ....: return first
  ....:

方法三:調用內置函數list,將元祖轉換為列表,然后調用list內置的sort方法實現。 注意:因為python sort列程是以C寫出的,使用高度優化算法,運行速度要比前2中快很多。

?
1
2
3
4
5
6
7
8
9
10
11
12
In [32]: def min3(*args):
  ....: tmp=list(args)
  ....: tmp.sort()
  ....: return tmp[0]
  ....:
 
In [29]: min2(3,*(1,2,3,4))
Out[29]: 1
In [31]: min(*(5,6,6,2,2,7))
Out[31]: 2
In [33]: min3(3,4,5,5,2)
Out[33]: 2

五、例子:

1、模擬通用set函數:

編寫一個函數返回兩個序列的公共部分,編寫inter2.py文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/python3
def intersect(*args):
  res=[]
  for x in args[0]:
    for other in args[1:]:
      if x not in other: break
    else:
      res.append(x)
  return res
def union(*args):
  res=[]
  for seq in args:
    for x in seq:
      if not x in res:
        res.append(x)
  return res

測試:

?
1
2
3
4
5
6
7
8
9
10
In [3]: from inter2 import intersect,union
In [4]: s1,s2,s3="SPAM","SCAM","SLAM"
In [5]: intersect(s1,s2),union(s1,s2)
Out[5]: (['S', 'A', 'M'], ['S', 'P', 'A', 'M', 'C'])
In [6]: intersect([1,2,3],(1,4))
Out[6]: [1]
In [7]: intersect(s1,s2,s3)
Out[7]: ['S', 'A', 'M']
In [8]: union(s1,s2,s3)
Out[8]: ['S', 'P', 'A', 'M', 'C', 'L']

2、模擬python 3.x print函數

編寫文件python30.py

(1)使用*args和**args方法

環境python2.7

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python
import sys
def print30(*args,**kargs):
  sep = kargs.get('sep',' ')
  end = kargs.get('end','\n')
  file = kargs.get('file',sys.stdout)
  if kargs:raise TypeError('extra keywords: %s' %kargs)
  output = ''
  first = True
  for arg in args:
    output += ('' if first else sep)+str(arg)
    first = False
  file.write(output + end)

交互結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
In [5]: print30(1,2,3)
1 2 3
In [6]: print30(1,2,3,sep='')
123
In [7]: print30(1,2,3,sep='...')
1...2...3
In [8]: print30(1,[2],(3,),sep='...')
1...[2]...(3,)
In [9]: print30(4,5,6,sep='',end='')
456
In [11]: print30(1,2,3)
1 2 3
 
In [12]: print30()

(2)使用keyword-only方法,實現效果和方法一一樣:

?
1
2
3
4
5
6
7
8
9
#!/usr/bin/python3
import sys
def print30(*args,sep=' ',end='\n',file=sys.stdout):
  output = ''
  first=True
  for arg in args:
    output += ('' if first else sep) + str(arg)
    first = False
  file.write(output + end)

 

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲欧美日韩精品 | 中文字幕在线观看视频一区 | 日韩av一区二区在线观看 | 欧美成人免费网站 | 久久草视频 | 99久色 | 一级高清 | 精品96久久久久久中文字幕无 | 在线中文视频 | 不卡视频在线 | 国产精品一区在线 | 欧美一区二区 | 成人免费视频视频在线观看 免费 | 亚洲一区二区三区高清 | 91麻豆精品国产91久久久资源速度 | 亚洲激情在线播放 | 免费在线观看黄视频 | 亚洲美女性视频 | 亚洲日本国产 | 国产精品免费观看 | 精品国产一区二区三区高潮视 | 婷婷久久综合 | 国产精品国产三级国产aⅴ中文 | 色爱区综合五月激情 | 激情久久婷婷 | 亚洲综合一区在线观看 | 国产欧美日韩综合精品一区二区 | 九九精品视频在线 | 日韩在线精品视频 | 国产精品久久久久一区二区三区 | 亚洲视频欧美视频 | 免费视频爱爱太爽了 | 一区二区日本 | 国产精品成人一区二区三区夜夜夜 | 在线播放中文字幕 | 国产一区视频在线 | 久久久久久亚洲一区二区三区蜜臀 | 色视频在线播放 | 亚洲欧美在线精品 | 牛牛电影国产一区二区 | 午夜成人免费视频 |