一、变量的引用
1.变量和数据都是存在内存中的,函数的参数传递和返回值都是靠引用传递的 2.变量中记录的是数据在内存中的地址 3.变量中记录数据的地址,就叫做引用 id()能够查看变量总保存数据的内存地址 4.函数中实参给形参传递时,传递的是实参保存的数据的引用,而不是实参保存的数据
二、可变和不可变类型
不可变类型:int,float,tuple, 可变类型: list,dict
三、局部变量和全局变量
局部变量是在函数内部定义的变量,只能在函数内部使用 不同函数,可以定义相同名字的局部变量,彼此之间不会产生影响 局部变量:执行了函数下方代码后,才会被创建 在函数调用完成之后,局部变量被释放
若是全局变量和局部变量重名,在函数内部会创建新的局部变量 global num num = 99 global会告诉解释器后面的变量num是全局变量,后面跟赋值语句时,会修改全局变量的值,而不会在函数内部创建局部变量 全局变量尽量采用gl_num的方式命名
四、函数的参数
return temp, cal = return (temp, cal) 返回一个元组
def tempcount():
temp = 30
wetness = 20
return temp,wetness
gl_temp,gl_wetness = tempcount()
print(gl_temp)
print(gl_wetness)
4.1 面试题:a b交换方式
a = a+b b =a-b a=a-b
python专有写法
a,b = (b,a) 就可以吧a,b的值调换 当一个函数返回值时元组时,小括号可以省略 return a,b 那么就可以写成 a,b = b,a
4.2 可变参数与不可变参数
def demo(num):
num = 100
print(num)
gl_num = 99
demo(gl_num)
print(gl_num)
无论传递的参数是可变还是不可变的,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的使用
def demo(num,num_list):
print('函数内部')
num = 200
num_list = [1,2,3]
print(num)
print(num_list)
print('函数代码完成')
gl_num = 99
gl_list = [4,5,6]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)
如果传递的参数是可变类型,在函数内部,使用方法修改了数据的内容,同样会影响到外部数据
def mutable(num_list)
num_list.append([1,2,3])
print(num_list)
gl_list = [6,7,8]
mutable(gl_list)
print(gl_list)
4.3 面试题+= 在python中,列表变量调用+=本质上是在执行列表变量的extend方法, 不会修改变量的引用
def demo(num,num_list):
print("函数内部代码")
num += num
num_list += num_list
print(num)
print(num_list)
print("函数代码完成")
gl_num = 9
gl_list = [1,2,3]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)
4.4函数的缺省参数 定义函数时,可以给某个参数指定一个default,具有default的参数就叫做缺省参数,调用函数时,如果没有传入缺省参数的值,就在函数内部使用定义函数时指定的参数默认值,通常将常见的值设置为缺省参数,简化函数的调用 对列表排序方法:
gl_num_list = [6,3,9]
gl_num_list.sort()
print(gl_num_list)
gl_num_list(reverse = True)
print(gl_num_list)
4.5指定函数的缺省参数 在参数后使用赋值语句,可以指定参数的缺省值
def print_info(name,gender = True):
"""
@param name: 姓名
@param gender: True是男生,False是女生
"""
gender_text = '男生'
if not gender:
gender_text = '女生'
print("%s是%s" % (name,gender_text))
print_info('aa')
print_info("bb",gender = True)
4.5.1 缺省参数的注意事项 1.缺省参数,需要使用最常见的值作为default 2.如果一个参数的值不确定,则不应该使用缺省参数 3.带有default的缺省参数必须在形参的末尾
4.6 多值参数 有时候可能一个函数能够处理的参数的个数是不确定的,这个时候就可以用多值参数 python中有两种多值参数: 1.参数名前面加一个*可以接受元组,加两个**可以接受字典 2.一般给多值参数命名时,用以下两个名字: *arg-----存放元组参数 **kwargs ------存放字典参数
def demo(num,*nums,**person):
print(num)
print(nums)
print(person['name'])
demo(1)
demo(1,3,2,3,4,5,name = 1,gender = True)
def sum_numbers(*args):
num = 0
print(args)
for i in args:
num += i
return num
result = sum_numbers(1,2,3,4)
print(result)
元组和字典的拆包 在调用带有多值参数的函数时,如果希望: 1.将一个元组变量,直接传递给args 2.将一个字典变量,直接传递给kwargs 就可以使用拆包,简化参数的传递,拆包的方式是: 1.在元组变量前面加一个* 2.在字典变量前加一个**
def demo(*args,**kwargs):
print(args)
print(kwargs)
gl_nums = (1,2,3)
gl_dicts = {'name' : 1}
demo(*gl_nums,**gl_dicts)
demo(1,2,3,name = 1)
4.7 递归 函数内部可以使用其他函数,也可以调用自己 递归的出口=参数的判断,避免出现死循环
递归累加:
def sum_numbers(num):
if num == 1:
return 1
temp = sum_numbers(num-1)
return num+temp
result = sum_numbers(3)
print(result)
|