python函数

函数的参数    

默认形参:  

 1 def small_star(hang=10,lie=10):
 2     i = 0
 3     while i < hang:
 4         j = 0
 5         while j < lie:
 6             print("*",end="")
 7             j +=1
 8         print()
 9         i += 1
10 
11 small_star(4,8)
12 small_star(8)
13 small_star()

 

普通形参 + 默认形参

"""普通形参必须写在默认形参的前面不能调换位置"""

 1 def small_star(hang,lie=10):
 2     i = 0
 3     while i < hang:
 4         j = 0
 5         while j < lie:
 6             print("*",end="")
 7             j +=1
 8         print()
 9         i += 1
10 small_star(5,7)    # 5行7列
11 # small_star(5)   # 5行10列
12 # small_star() error

 

3.关键字实参

"""
1.如果都是关键字实参,可以任意调整实参的顺序
2.普通实参必须写在关键字实参的前面
"""

 1 def small_star(hang,a,b,c,lie=10):
 2     i = 0
 3     while i < hang:
 4         j = 0
 5         while j < lie:
 6             print("*",end="")
 7             j +=1
 8         print()
 9         i += 1
10 
11 # hang a ... lie 具体指定参数的值叫做关键字实参,在函数的调用处;
12 # small_star(hang=3,a=4,b=5,c=6,lie=7)
13 # small_star(b=5,c=6,lie=7,a=4,hang=3)
14 small_star(3,4,b=5,c=6,lie=7)
15 small_star(3,4,b=5,lie=7,c=6)
16 # small_star(b=5,c=6,lie=7,3,4) error

 

4,普通收集参数,

专门用来收集那些多余的没人要的普通实参
收集之后,会把多余实参打包成一个元组
参数头上1个星星

1 def func(a,b,c,*args):
2     print(a,b,c) # 1 2 3
3     print(args)  # (4,5,6)
4 
5 func(1,2,3,4,5,6)

 

计数任意个数之和

1 def mysum(*args):
2     total = 0
3     for i in args:
4         total += i
5     print(total)
6 mysum(1,2,3,4,4,45,10,100)

 

5.关键字收集形参:

  专门用来收集那些多余的没人要的关键字实参
  收集之后,会把多余关键字实参打包成一个字典
  参数头上有2个星星

1 def func(**kwargs):
2 pass
3 kwargs => keyword arguments
4 """
5 
6 def func(a,b,c,**kwargs):
7 print(a,b,c)
8 print(kwargs) # {'f': 100, 'e': 200, 'z': 12}
9 func(c=1,a=3,b=10,f=100,e=200,z=12)

示例,拼接任意个数值变成字符串

 1 def func(**kwargs):
 2     strvar1 = ""
 3     strvar2 = ""
 4     # 定义职位信息
 5     dic = {"monitor":"班长","classflower":"班花"}
 6     print(kwargs)
 7     # 共5次循环
 8     for k,v in kwargs.items():
 9         if k in dic:
10             # 将2次循环的结果通过+= 拼接在一起
11             strvar1 += dic[k] + ":" + v + "\n"            
12         else:
13             # 将3次循环的结果通过+= 拼接在一起
14             strvar2 += v + " , "
15     print(strvar1.strip())
16     print("划水群众:",strvar2.strip(" , "))
17 
18 
19 func(monitor="凌凌漆",classflower="小美",water1="零零发",water2="玲玲才",water3="零零恭")

{'monitor': '凌凌漆', 'classflower': '小美', 'water1': '零零发', 'water2': '玲玲才', 'water3': '零零恭'}
班长:凌凌漆
班花:小美
划水群众: 零零发 , 玲玲才 , 零零恭

 

6.命名关键字形参

(1) def func(a,b,*,c,d) 跟在*号后面的c和d是命名关键字参数
(2) def func(*args,e,**kwargs) 加在*args和**kwargs之间的参数都是命名关键字参数

命名关键字参数 : 在调用函数时,必须使用关键字实参的形式来进行调用;

 1 def func(a,b,*,c,d):
 2     print(a,b)
 3     print(c,d)
 4     
 5 # 必须指定关键字实参,才能对命名关键字形参进行赋值
 6 func(1,2,c=3,d=4)
 7 
 8 # 定义方法二
 9 def func(*args,e,**kwargs):
10     print(args)   # (1, 2, 3, 4)
11     print(e)      # 3
12     print(kwargs) # {'a': 1, 'b': 2}
13 func(1,2,3,4,a=1,b=2,e=3)

 

7.星号的使用"""

* 和 ** 如果在函数的定义处使用:
* 把多余的普通实参打包成元组
** 把多余的关键字实参打包成字典

* 和 ** 如果在函数的调用处使用:
* 把元组或者列表进行解包
** 把字典进行解包
""" 

1 def func(a,b,*,c,d): 
2
print(a,b) 3 print(c,d) 4 5 tup = (1,2) 6 # 函数的调用处 *号用法 7 func(*tup,c=3,d=4) # func(1,2,c=3,d=4) 8 9 结果: 10 1 2 11 3 4
1 # 函数的调用处 **号用法
2 dic={"c":3,"d":4}
3 func(1,2,**dic) # func(1,2,c=3,d=4)
4  结果:
5  1 2
6  3 4

#结合写法

tup = (1,2) dic={"c":3,"d":4} func(*tup,**dic) 结果: 1 2 3 4

 

# 定义成如下形式,可以收集所有的实参
def func(*args,**kwargs):
pass

# 总结: 当所有的形参都放在一起的时候,顺序原则:""" 普通形参 -> 默认形参 -> 普通收集形参 -> 命名关键字形参 -> 关键字收集形参"""

def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
# 以上两个函数 打印结果
#(一)
f1(1, 2) # a =1 b=2 c=0 args=() kw={}
f1(1, 2, c=3) # a=1,b=2,c=3,args=() kw={}
f1(1, 2, 3, 'a', 'b') #a=1 b=2 c=3 args=(a,b) kw={}
f1(1, 2, 3, 'a', 'b', x=99) # a=1 b=2 c=3 args=(a,b) kw={x:99}
f2(1, 2, d=99, ext=None)#a=1 b=2 c=0 d=99 kw={ext:None}

#(二)
args = (1, 2, 3, 4)
kw = {'d': 99, 'x': '#'}
# f1(1,2,3,4,d=99,x=#)
f1(*args, **kw) # a=1 b=2 c=3 args=(4,) kw={d:99,x:#}


#(三)
myargs = (1, 2, 3)
mykw = {'d': 88, 'x': '#'}
# f2(1,2,3,d=88,x=#)
f2(*myargs, **mykw) # a=1,b=2,c=3 d=88 kw={x:#}

#(四)
def f1(a, b, c=0, *args,d,**kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
print(d)

f1(1,2,3, 'a', 'b',d=67, x=99,y=77) # a=1 b=2 c=3 args=(a,b) kw={x:99,y:77}
# d=67

 

 

posted @ 2021-04-06 17:35  urls  阅读(72)  评论(0编辑  收藏  举报