1)全局变量和局部变量:在函数内部改变全局变量需要加关键字global
# 要在函数内部修改全局变量需要使用关键字 global
# a = 100
# def func1():
# global a # 声明a为全局变量
# # 加上关键字 global 就可以改变全局变量
# a = 200
# print(a)
# func1()
#
# print(a)
2)函数返回值:函数返回多个值是以元组的形式输出,如果本身是列表,字典,元组,集合则以对应的形式输出
# 函数返回多个值
def func1():
return 1, 2
def func2():
return [10, 20]
def func3():
return {'name': 'tom'}
print(func1()) # 函数返回多个值以元组 列表 字典的形式返回
print(func2())
print(func3())
3)参数定义:有四种参数类型
1)位置参数
2)关键字参数
3)缺省参数(默认参数)
4)不定长参数(可变参数)
# 位置参数 传递和定义参数的顺序必须一致
# 关键字参数 通过‘键=值’的形式加以指定 清除了参数顺序需求
# 注意:位置参数必须在关键字参数的前面,关键字之间不存在先后顺序
# def func1(name, age, gender):
# print(f'你的姓名{name},你的年龄{age}, 你的性别{gender}')
#
# func1('tom', age=20, gender='男')
# func1('tom', gender='女', age=30)
# 缺省参数 也叫默认参数,为参数提供默认值,在传参时,可不提供该默认参数的值
# def func1(name, age, gender='男'):
# print(f'你的姓名{name},你的年龄{age}, 你的性别{gender}')
# func1('df', 23) # 可以不默认参数
# func1('dig', 20, '女') # 传参可改变默认参数
# 不定长参数也叫可变参数 用于调用不确定参数个数的函数, 可用包裹(packing)位置参数或者包裹关键字参数,来进行参数传递
# 包裹位置参数
# def func1(*args):
# print(args)
# func1('tom', 20) # 传递的两个参数会被arge包裹,变成元组类型
# # 包裹关键字传递
# def func2(**kwargs):
# print(kwargs)
# func2(name='tom', age=20, gender='男') # 组合所传的参数,变成字典类型
4)拆包和交换变量值:元组和字典的拆包
# 拆包:元组
# def return_num():
# return 100, 200
# a, b = return_num() # 这是一个拆包过程
# print(a)
# print(b)
# # 拆包:字典
# dict1 = {'name': 'tom', 'age': 20, 'gender': '男'}
# a, b, c = dict1 # 字典拆包 取出的是字典中的key值
# print(a, "\n", b, "\n", c)
# print(dict1[a])
# print(dict1[b]) # 这里取出的是value值
# print(dict1[c])
# 交换变量
a, b = 1, 2
a, b = b, a # 直接交换
print(a, b)
5)引用:id() 可以查看变量的地址
# 变量:可变和不可变 int,浮点型,字符串,元组类型为不可变类型,列表,字典,集合为可变数据类型
# id():检测两个变量的id
# a = 1
# b = a
# print(id(a))
# print(id(b)) # 地址会一样
# a = 2 # 当改变值时,地址也会发生变化
# print(id(a))
# print(id(b))
# 列表数据变与不变地址都不变
# 引用当作实参
def text1(a):
print(a)
print(id(a))
a += a # 改变数据后会改变地址,列表数据改变,地址不变
print(a)
print(id(a))
b = 100
text1(b)