Python基础
- Python基础-PEP8: Python代码风格指南
- Python基础-面向对象(四)
- Python基础-面向对象(三)
- Python基础-面向对象(二)
- Python基础-面向对象(一)
- Python基础-模块
- Python基础-异常的捕获和处理
- Python基础-文件夹的操作
- Python基础-文件的操作
- Python基础-函数(三)
- Python基础-函数(二)
- Python基础-函数(一)
- Python基础-字符串,元组,列表,字典,集合之间的相互转
- Python基础-字符串,元组,数组,字典-公共方法
- Python基础-集合set
- Python基础-字典
- Python基础-元组
- Python基础-列表
- Python基础-字符串
- Python基础-break和continue
- Python基础-for循环
- Python基础-while循环
- Python基础-if判断语句
- Python基础-数据类型转换,ASCII码对照表
- Python基础-运算符
- Python基础-输出print和输入input
- Python基础-标识符和关键字
- Python基础-变量以及类型
- Python基础-注释的引入
- Python基础-第一个python程序
- Python基础-简介
Python基础-函数(三)
Python基础-函数(三)
对函数返回的数据直接拆包
def myinfo(): name ='bayi' age = 35 sex = '男' return name, age, sex my_name, my_age, my_sex = myinfo() # 用三个变量去接受函数的返回值 print(my_name) # bayi print(my_age) # 35 print(my_sex) # 男
拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
除了对元组拆包之外,还可以对列表、字典等拆包
交换2个变量的值
第一种方式
a = 4 b = 5 c = 0 a = b b = c c = a print(a) # 5 print(b) # 0 print(c) # 5
第二种方式
a = 4 b = 5 a = a+b # a=9, b=5 b = a-b # a=9, b=4 a = a-b # a=5, b=4 print(a) #5 print(b) #4
第三种方式
a, b = 4, 5 a, b = b, a print(a) # 5 print(b) # 4
引用(一)
在python中,值是靠引用来传递来的。
我们可以用id()来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标示。
a = 1 b = a print(id(a)) #10894080 print(id(b)) #10894080 # id(a)等于id(b) 我们可以理解为同一个值的引用 a = 2 print(id(a)) #10894112 注意a的id值已经变了,可以理解为a又开了一个新的内存地址 print(id(b)) #10894080 b的id值依旧 # 数字是不可变量,所有需要新开一个内存地址
a = [1,2,3] b = a print(id(a)) #140327580501576 print(id(b)) #140327580501576 # id(a)等于id(b) 我们可以理解为同一个值的引用 a.append(4) print(id(a)) #140327580501576 注意a的id值没有变,说明直接修改了内存的值,而没有新开一个内存地址 print(id(b)) #140327580501576 b的id值依旧 # 列表是可变类型,所有可以直接修改,而不用新开一个内存地址
所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
可变类型有: 列表、字典、集合
不可变类型有: 数字、字符串、元组
引用(二)
可变类型与不可变类型的变量分别作为函数参数时,会有什么不同吗?
def test1(b): # 变量b一定是一个局部变量,就看它指向的是谁?可变还是不可变 print(id(b)) # 10897248 b += b # += 是直接对b指向的空间进行修改,而不是让b指向一个新的 print(id(b)) # 10900448 # b = b+b # xx = xx+yyy 先把=号右边的结果计算出来,然后让b指向这个新的地方,不管原来b指向谁 # 现在b一定指向这个新的地方 # a = [11, 22] a = 100 test1(a)
Python中函数参数是引用传递(注意不是值传递)
对于不可变类型,因变量不能修改,所以运算不会影响到变量自身
而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量
递归函数
通过前面的学习知道一个函数可以调用其他函数。如果一个函数在内部不调用其它的函数,而是调用自己本身的话,这个函数就是递归函数。
递归函数的作用:我们来计算阶乘 n! = 1 * 2 * 3 * ... * n
1,可以用while循环来实现
# 计算阶乘 n! = 1 * 2 * 3 * ... * n # while 方法 def cal_num(num): i = 1 result = 1 while i <= num: result *= i i += 1 return result res = cal_num(3) print(res)
2,可以用递归函数来实现
# 计算阶乘 n! = 1 * 2 * 3 * ... * n # 递归函数方法 def cal_num(num): if num >= 1: result = num * cal_num(num-1) else: result = 1 return result res = cal_num(3) print(res) # 结果是6
匿名函数
通常定义一个函数最少需要2行定义, 能不能简化一下定义方式, 一行搞定! 当然可以,我们可以把这种函数写成一个 匿名函数。
因此定义的函数没有名字,这样的函数叫做匿名函数
1,匿名函数的语法结果:lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]
# 不带参数的匿名函数 info = lambda : 30 a = info() print(a) # 30 # 带参数的匿名函数 sum = lambda a,b : a+b res = sum(100,200) print(res) # 300
2,匿名函数和普通函数的区别:
匿名函数中不能使用 if 语句、while 循环、for 循环, 只能编写单行的表达式,或函数调用, 普通函数都可以。
匿名函数中返回结果不需要使用 return, 表达式的运行结果就是返回结果, 普通函数返回结果必须 return。
匿名函数中也可以不返回结果. 例如: lambda : print('hello world')
匿名函数的主要作用
前面我们学到可以用函数作为另外一个函数的参数,匿名函数也可以作为另外一个函数的参数,而且可以直接把匿名函数格式写到参数里,对于只需要用到一次函数, 可以通过匿名函数减少代码量
def my_function(func,a,b): # func代表匿名函数名字 result = func(a, b) print('result:', result) my_function(lambda a, b: a / b,10,20) #0.5 my_function(lambda a, b: a // b,10,20) #0 my_function(lambda a, b: a % b,10,20) #100
最后修改:2020年2月27日 22:14