python学习笔记05-变量的进阶

一、变量的引用

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()#右边部分相当于返回元组
# 这种方式可以吧函数返回的元组内的数据分别保存到gl_temp和gl_wetness中
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)#拆包语法,简化元组,字典变量的传递,如果不使用拆包,gl_nums和gl_dicts都会传递给args这个变量
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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值