python学习笔记-函数
1. 定义函数
Def 函数名(参数):
代码块
def sel_func():
print("显示余额")
print("存款")
print("取款")
2. 函数的参数
a,b是形参 10,20 是实参
Def add(a,b):
Result = a + b
Print(result)
Add(10,20)
3. 函数的说明文档
help(函数名):查看函数的说明文档
定义函数说明文档:
Def 函数名(参数):
""" 说明文档位置"""
代码
def sumss(a,b):
"""
:param a: 加数
:param b: 加数
:return: 和
"""
s = a+b
return s
help(sumss)
4.函数嵌套调用
def print_line():
print('-' * 20) #*代表复制 20次 -
print_line()
def print_lines(num):
i = 0
while i < num:
print_line()
i = i + 1
print_lines(10)
5. 变量的作用域
变量的作用域指的是变量生效的范围:全局变量 局部变量
局部变量:定义在函数体内部的变量,即只在函数体内部生效 函数调用完成之后,销毁局部变量
全局变量函数体内外都可以生效的变量
A = 100
Def testb():
Print(a)
注意:如果在函数内部直接修改全局变量,这个变量仍然是局部变量,修改的是局部变量
如何在函数里面修改全局变量,使用global关键字声明a是全局变量。
6.函数的多个返回值
Def return_num():
Return 1,2
Result = return_num()
Print(result) #(1,2)
总结:return 后面可以返回 元组 列表 字典 返回多个值
7.函数的参数
位置参数:根据函数定义的位置参数来传递参数 实参和形参顺序保持一致
关键字参数:通过“键 = 值”形式加一指定
Use_info(name = 'rose',age = 20,gender = 'male')
注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但是关键字参数不存在先后顺序
User_info('小明',age = 20,gender = 'male')
缺省参数:为参数提供默认值,调用函数不用传递该默认参数的值,所有位置参数必须出现在默认参数之前,
8. 不定长参数
可变参数,用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递
包裹位置参数传递:
def user_info(*args):
print(args)
#传进去的参数会被args变量收集,他会根据传进去参数的位置合并为一个元组,args是元组类型,这就是包裹位置传递
user_info('tom')
user_info('tom',20)
#元组数据只有一个数据 加上 逗号
('tom',)
('tom', 20)
包裹关键字参数传递:
#返回一个字典
def user_info1(**kwargs):
print(kwargs)
user_info1(name = 'tom',age = 20)
user_info1(name = 'xiaoming',age = 30,gender = 'male')
9. 拆包和交换变量值
拆包:元组
def return_num():
return 100,200 #返回一个元组
num1,num2 = return_num()
print(num1)
print(num2)
拆包:字典
dict1 = {'name' : 'tom','age' : 20}
a,b = dict1 #获得是键
print(a)
print(b)
#字典支持 根据键 查找
print(dict1[a])
print(dict1[b])
交换变量的值:
方法1: temp = a a = b b = temp
方法2:a,b = 1,2 a,b = b ,a
10.引用类型
在python中,值都是靠引用来传递的
A = 1
B = a
Print(a)
#id 内存地址相同 ab是同一内存地址的不同引用 使用不同的变量名 但是指向相同的变量地址
Print(id(a))
Print(id(b))
A = 2
Prin(b) #1
#原因:将a修改 将开辟另外一份内存 存储2 那么ab内存地址将不同
#不同的内存地址
Print(id(a))
Print(id(b))
列表类型 即使列表修改了 内存地址也是一样的 修改列表不会开辟一份新的内存地址
aa = [20,30]
bb = aa
print(id(aa))
print(id(bb))
aa.append(33)
print(aa)
print(bb)
print(id(aa))
print(id(bb))
**总结:使用int类型 修改int变量 导致a的内存地址发生变化 但是b的内存地址不会发生变化 使用列表类型,即使修改列表变量,内存地址不会发生变化(修改不会开辟新的内存地址)**
11. 可变与不可变类型
可变类型:数据能够直接进行修改, 不可变类型:数据不能直接进行修改
这里说的直接进行修改 指的是数据在原有的内存地址直接进行修改,那么,不可变 指的是 修改数据 会开辟另一份地址空间,
可变:列表 字典 集合
不可变: 整数 浮点数 字符串 元组