python学习笔记(3)

本节内容:

  1. 函数基本语法和特性
  2. 函数参数与局部变量
  3. 返回值
  4. 递归
  5. 匿名函数
  6. 高阶函数
  7. 内置函数

 

一、函数基本语法和特性

定义:函数式指将一组语句的集合通过一个名字(函数名称)封装起来,要想执行这个函数,只需要调用其函数名即可

特性:

  • 减少重复代码使用
  • 程序变的可扩展
  • 程序变的容易维护

语法定义:

 

 1 def fun():     #函数名称
 2     "注释"
 3     print'this is function' 4     return 0   #定义返回值,可以随便定义返回值,代表函数执行完毕
 5 fun()          #调用参数
 6 
 7 
 8 
 9 #函数其实就是变量;
10 
11 变量:
12 A = B
13 执行:print(A)
14 结果:B
15 
16 
17 函数:
18 def fun():
19     print'123'20 
21 执行:fun()
22 结果:123
23 
24 写法不一样,但是本质是一样的,函数可以嵌套一些功能在里面

 

 

 

 

二、函数参数和局部变量

 

形参变量只有在被调用时才分配内存单元,在调用结束时即可释放所分配的内存单元。形参是在函数内有效。

实参可以是常量、变量、表达式、函数等,无论实参何种类型的量,在进行函数调用时,他们都必须有确定的值,以便这些值传送给形参。

形参和实参位置是一一对应关系

 

 

 默认参数:

def student(name,age,sex,local='BJ'):
    print("---学生信息---")
    print(name)
    print(age)
    print(sex)
    print(local)

student("张三",25,"")

执行结果为:name=张三,age=25,sex=nan,local=BJ;
默认参数local默认=BJ,如果local定义新值则显示为新值,如果没有定义则默认为BJ;
注:默认形参和实参关系是一一对应

 

关键参数:

正常情况下给函数传递参是要按照顺序,不想按照顺序可以用关键参数,需要指定参数名称即可,如果有形参和关键参数同时使用,关键参数必须放在位置参数之后。

1 def student(name,age,sex):
2     print("---学生信息---")
3     print(name)
4     print(age)
5     print(sex)
6 
7 student(name='张三',age=25,sex='')

 

非固定参数:

函数在定义时不确定用户想传多少个参数,可以使用非固定参数

*args 把多传入的参数变成一个元组形式;(只接收N个位置参数转换成元组的形式),用途:便于用于用户扩展性

1 def test(x,*args):
2     print(x)
3     print(args)
4 
5 test(1,2,3,4,5)
6 
7 输出结果:
8 x = 1
9 args =(2,3,4,5)

*kwargs   把N个关键字参数,转换成字典的方式

1 def test6(**kwargs):
2      print(kwargs)
3 
4 #两种写法
5 test6(**{'name':'han','age':27,'sex':'F'})
6 test6(name='han',age=26,sex='F')
7 
8 执行结果:{'name': 'han', 'age': 26, 'sex': 'F'}    ##字典的形式

混合使用:

 1 def test(name,age=18,*args,**kwargs):
 2     print(name)
 3     print(age)
 4     print(args)
 5     print(kwargs)
 6 
 7 test('han',6,7,8,sex='m',hohhy='tesla')
 8 输出结果:
 9 name = han
10 age = 6      #为什么会等于6 而不是等于18,参数混合使用时,默认采用位置对应关系,name对应han,age对应6,默认参数是18,如果重新赋值就会显示新值6
11 args = (7, 8)
12 kwargs = {'sex': 'm', 'hohhy': 'tesla'}

 

局部变量:

在子程序中定义的变量称为局部变量,在程序中一开始定义的变量称为全局变量

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序

当全局变量与局部变量同命时:局部变量起作用,其他地方全局变量起作用

 1 school = 'zhangsan'                     #全局变量
 2 def change_name(school):
 3      print("before change",school)
 4      school='Zhang'                      #局部变量,只在函数中生效
 5      print("after change",school)
 6  
 7 change_name(school)
 8 print(school)
 9 
10 输出结果:
11 before change zhangsan
12 after change Zhang 
13 zhangsan    
14 15 可以修改列表:
16 mylist = [10, 20, 30]
17 def changeme(mylist):
18     mylist.append([1, 2, 3, 4])
19     print("函数内取值: ", mylist)
20     return
21 
22 changeme(mylist)
23 print("函数外取值: ", mylist)
24 
25 输出结果:
26 [10, 20, 30, [1, 2, 3, 4]]
27 [10, 20, 30, [1, 2, 3, 4]]

 

 

 

三、返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止并返回结果。可以理解为return语句代表函数的结束
  2. 如果未在函数中指定return那这个函数的返回值为None
 1 def test():
 2     print("3")
 3     return 1,'hello',['a','b'],{"name":"name","name1":"name1"}
 4 
 5 x=test()
 6 print(x)
 7 
 8 
 9 ##函数返回值,teturn 可以定义任何返回值;
10 #作用:通过返回值可以决定后续代码怎么运行;
11 #返回值=0,返回值None       #这里的零指的是没有指定返回值
12 #返回值=1,返回值object     
13 #返回值>1,返回值tuple

 

 

 

四、递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

1 def calc(n):
2      print(n)
3      if int(n/2) >0:
4          return calc(int(n/2))
5 
6  calc(20)

递归特性:

  1. 必须有一个明确的结束条件
  2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
  3. 递归效率不高,递归层次过多会导致栈溢出。

 

 

 

五、匿名函数

匿名函数就是不需要显示的指定函数,使用 lambda 来创建匿名函数。

语法:lambda 参数1,参数2....:执行条件

1 # 可写函数说明
2 sum = lambda arg1, arg2: arg1 + arg2  #arg1,arg2为参数,arg1 + arg2为执行条件
3 
4 # 调用sum函数
5 print("相加后的值为 : ", sum(10, 20))   #参数arg1=10,arg2=20,执行条件为求和
使用案例:
 1 calc = lambda  n:print(n)    ##n代表参数:print(n)代表执行条件
 2 calc(4)  #参数n=4,执行条件:print(n) 即输出结果为4
 3 输出结果:4
 4 
 5 calc = lambda n:3 if n < 4 else n  #n代表参数:3 if n < 4 else n 执行条件,意思为:如果n小于4则打印3,否则打印n
 6 print(calc(5))  #参数n=5,if判断 5不小于4,所以打印n,即结果为5
 7 输出结果:5
 8 
 9 res = filter(lambda n:n > 5,range(10))  #配合filter使用,统计出range(10) 大于5的数据
10 for i in res:
11     print(i)
12 输出结果:6、7、8、9
13 
14 res = map(lambda n:n*2,range(4))  
15 for i in res:
16     print(i)
17 
18 输入结果:0、2、4、6、8

 




六、高级函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
1 def add(x,y,f):
2     return f(x) + f(y)
3  
4 res = add(3,-6,abs)
5 print(res)



七、内置函数

参考菜鸟教程:https://www.runoob.com/python3/python3-built-in-functions.html

 

 


 

posted @ 2021-07-06 20:23  大韩小白  阅读(54)  评论(0)    收藏  举报