函数初识

函数

 

写函数的时候,要尽量以功能为导向,结果最好不要直接在函数中打印(比如len(list),我只想要长度,不需要打印输出)

def len_1(para): 同样,函数名不能是关键字,同等变量的命名规则就行了
count = 0
for i in para:
count += 1
return count return 终止函数,并返回一个值 (如果没有return,默认返回None (等同return None))
a = 'dfdf'
print(len_1(a))

 

没有返回值

  • 啥也不写
  • return
  • return None

返回一个值: 可以返回任意的数据类型。返回什么 就接受什么
当然,我们目的是返回一个相关的参数
返回多个值: 用一个变量接收,接收到的是一个元组
用多个变量接收,返回值和接收返回值的变量数目要一致
---------------------------

参数:

形参和实参
传参数可以传任意的数据类型,并且传什么,接收什么
而站在传参数的角度上看问题:两种传参方式:
第一种:按照位置
第二种:按照关键字
如果两种混用,按照先传位置,后传关键字的传参顺序(一般不推荐)

1 def len_1(para): para:参数:形式参数,形参 接收参数
2 if len(para) > 2:
3 return True
4 else:return False
5 a = 'ab'
6 len_1(a) a:参数:实际参数,实参 传参数、传参
7 print(len_1(a))

 


--------------
-----------

1 def replace_1(name,age)
2 pass
3 
4 replace_1('zhou',18) 按照位置
5 replace_1(name = ‘zhou’,age = 18) 按照关键字
6 replace_1(‘zhou’,age = ‘18’) 先位置,后参数,否则会出错
7 name是str类型,age是int类型,所以 多个 参数可以分别使用任意数据类型

 

--------
--------

默认参数

def replace_1(name,age = 18)
pass
replace_1('zhou') 不传年龄参数,就默认18 (默认参数是18)
replace_1(‘zhou’,age = 80) 传年龄参数80, age = 80

------
-----
函数默认参数魔性的用法

 1 def lst(li = []):
 2     li.append(1)
 3     return li
 4 
a = [] 5 print(lst(a)) 6 print(lst(a)) 7 print(lst(a)) 8 print(lst(a)) 9 #[1] 10 #[1, 1] 11 #[1, 1, 1] 12 #[1, 1, 1, 1] 13 14 类似于列表在函数外面 15 l = [] 16 def lst(li = l): 17 li.append(1) 18 return li 19 a = [] #a = [] 会累加 20 print(lst(a)) 21 print(lst(a)) 22 print(lst(a)) 23 print(lst(a)) 24 不过发现一个情况,函数定义的参数是个列表,实参也得是列表a = [list] 25 26 def lst(li = []): 27 li.append(1) 28 return li 29 print(lst([])) 30 print(lst([])) 31 print(lst([])) 每次都让[]添加 32 print(lst([])) 33 34 so,魔性的用法:默认参数 尽量避免使用可变数据类型

 

------

函数的参数:
形参:(定义阶段)
位置参数
默认参数
动态参数
实参:(调用阶段)
位置传参
关键字传参

动态参数:

*args  **kwargs

 1 def func(*args):   参数前面加*,这个参数就变成动态参数
 2     print(args)      如果打印,会发现 接收过来的参数是元组形式
 3 func(1,2,3,4)
 4 #(1,2,3,4)
 5 或者:迭代添加参数,迭代参数   *变量名称
 6 li = ‘dfdf’
 7 func(*li)
 8 #('d','f','d','f')   元组
 9 ---
10 
11 def func(a,b,c,*args):   
12     print(a,b,c)
13     print(*args)
14     
15 func(1,3,2,4,5,6)
16 #1,3,2                           #位置参数接收完后,剩下的都被*args以元组的方式接收
17 #(4,5,6)   元组
18 -----
19 
20 如果有默认参数,那就放到*args后面
21 def func(a,b,c,*args):   
22     print(a,b,c)
23     print(*args)
24     
25 func(1,3,2,4,5,6)
26 #1,3,2                           #位置参数接收完后,剩下的都被*args以元组的方式接收
27 #(4,5,6)
28 -------
29 
30 def func(a,b,c,*args,key = 100):   
31     print(a,b,c)
32     print(*args)
33     print(key)    
34 func(1,3,2,4,5,6)
35 #1,3,2
36 #456
37 #100
38 func(1,3,2,4,5,key = 9)
39 #1,3,2
40 #4,5
41 #9
42 ---------
*args,**kwargs

 

形式参数的顺序

    位置        剩余位置       默认(关键字)    关键字(除了默认关键字,剩下的关键字)
def func(   a,b,      *args,           key = '11'                 **kwargs)

1 def func(a,b,c,*args,key = 100,**kwargs):
2     print(a,b,c)       #1 3 2
3     print(args)        #(4, 'a')
4     print(key)          #18
5     print(kwargs)   #{'m': 6, 'n': 'y'}
6 
7 func(1,3,2,4,'a',key=18,m = 6,n = 'y')

 

万能传参

 1 def func(*args,**kwargs):
 2     print(args)
 3     print(kwargs)
 4 
 5 func()
 6 
 7 li = ‘abcd’
 8 func(*li)            #'a','b','c','d'
 9 dic = {'name':'kitty','age':18}
10 func(**dic)     #
11 
12 li = 'abcd'
13 def func(*args):
14     print(args)
15 func(*li)                              *变量打散
16 #('a', 'b', 'c', 'd')
17 
18 
19 def func(**kwargs):      #**kwargs 只接收关键字,所以调用函数是,括号不能放变量
20     print(kwargs)
21 dic = {'name':'kitty','age':18}
22 func(name='kitty',age=18)    #只能是关键字参数
23 func(**dic)  #如果不想重新输入字典的键值对,可以用**dic,把字典打散
24 #字典打散:'name'='kitty','age'=18
View Code

 

posted @ 2017-10-31 16:40  静静别跑  阅读(149)  评论(0编辑  收藏  举报