Python3 函数与函数式编程

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 #Author:sking
 4 #Python3 函数与函数式编程
 5 
 6 #三种编程方式:1.面向过程(类class) 2.面向对象(过程def) 3.函数式编程(函数def)
 7 #函数的优点:1.代码重用,代码易读 2.保持代码的一致性 3.便与修改,易扩展
 8 
 9 #定义函数
10 def func_01():
11     """函数的注释,就要要说明此函数的作用等等"""
12     print('哈哈1')
13     return 0 #return是用来结束函数的,同时也可以返回值
14     #return 1,'haha',['haha'] 都可以  当返回多个值时,会将返回结果组成一个元祖进行返回
15     #return 也可以返回一个函数 return func_01
16 def func_03():
17     print('haha3')
18     return func_01()
19 data03 = func_03() #0
20 print(data03)
21 #定义过程(实际就是没有返回值的函数)
22 def func_02():
23     """过程的注释"""
24     print('haha2')
25 
26 x = func_01()
27 y = func_02()
28 print(x, y) #0 None
29 
30 #函数的参数
31 def func_04(a, b, c):  #a,b,c 就是函数func_04的形参
32     print(a, b, c)
33     return 0
34 
35 func_04(1, 2, 3) #1 2 3 位置参数调用   ‘1, 2, 3’就是函数func_04的实参,形参和实参是一一对应的
36 #或者可以不考虑a, b的位置,与形参的顺序无关,可以这样写
37 func_04(b=9, a=8, c=6) #8 9 6 关键字参数调用
38 
39 #位置参数和关键字参数的混和调用,一定要记住一句话”关键字参数不能写在位置参数的前面“
40 func_04(6, c=2, b=4) #6 4 2  ok
41 #func_04(6,8,y=2) #报错  因为位置参数b已经有8了
42 #func_04(5,c=9,7) #报错 因为位置参数c已经有7了,另外就是关键字参数在位置参数的前面了
43 
44 #默认参数的特点:调用函数的时候,默认参数非必须传递
45 def func_05(a, b=2): #b的值默认是2
46     print(a, b)
47 func_05(4) #4 2 #不给b传递参数的时候,b就调用默认值
48 func_05(4, 5) #4 5 #给b传递参数的时候,b就调用传递的参数
49 func_05(8, b=9) #8 9 #给默认参数赋值也可以这样写
50 
51 #可变参数 *args(可变位置参数)
52 #可变关键字参数 **args
53 #   *是元组   **是字典
54 def test_01(*args):  #args是形参名,可以任意命名,但是一般都写作args
55     print(args) #(1, 2, 3, 4, 5) 是一个元祖
56 test_01(1,2,3,4,5)
57 tt = [1,2,3,4,5]
58 test_01(tt) #结果是([1, 2, 3, 4, 5],) 它把[1,2,3,4,5]作为了一个参数
59 test_01(*tt) #结果是(1, 2, 3, 4, 5)  ok
60 #也就是test_01(*[1,2,3,4,5])  也就是test_01(*[列表])  也可以通过这种方式传递列表
61 
62 def test_02(**kwargs):
63     print(kwargs) #{'a': 1, 'b': 2, 'c': 3} 是一个字典
64 test_02(a=1,b=2,c=3)
65 #test_02('a':1, 'b':2) #不可以这样传入字典'
66 tta = {'a':1, 'b':2}
67 test_02(**tta) #{'a': 1, 'b': 2} 这样也可以
68 #也就是test_02(**{'a':1, 'b':2})  也就是test_02(**{字典}) 也可以通过这种方式传递字典
69 
70 def c(*kk, **kr):
71     return kk, kr
72 print(c(1, 2, a=1, b=2))    #结果((1, 2), {'a': 1, 'b': 2})
73 
74 def d(a, b, *kk, **kr):
75     return a, b, kk, kr
76 print(d(1, 2, 3, 4, c=1, d=2))  #结果(1, 2, (3, 4), {'c': 1, 'd': 2})
77 # #因为其实renturn只能返回一个结果,它只是把多个结果放在了一个元祖中了
78 #这里在赋值的时候就不能再用a=*了,因为a已经在def d(a, b, *kk, **kr)里面定义过了
79 
80 #取出关键字参数的值,也就是取出字典的值
81 def test_04(**kwargs):
82     print(kwargs) #{'name': 'lidong', 'age': 8}
83     print(kwargs['name']) #lidong
84     print(kwargs['age']) #lidong
85 test_04(name='lidong',age=8)

 

posted @ 2019-01-22 20:58  SKING_Python  阅读(254)  评论(0编辑  收藏  举报