函数杂记

# 只要函数执行到return 函数就会停止执行
# 1. 每个函数如果在函数中不写return, 默认返回None
# 2. 我们也可以只写一个return, 也是返回None, 停止函数的执行
# 3. return 一个返回值. 你在调用方能接受到一个返回值
# 4. return 多个返回值. 多个值需要用,隔开 接收的位置. 接收的是元组.




# 参数: 在函数执行的时候给函数传递的信息
# 形参: 在函数声明的位置.声明出来变量
# 实参: 在函数调用的时候. 实际你给函数传递的值 
# 函数的参数个数是没有要求的 但是,在运行的时候. 形参和实参要匹配. 按照位置把实参赋值给形参
# 参数的分类:
# 站在实参的角度:
# 1. 位置参数
# 2. 关键字参数
# 3. 混合参数, 注意顺序. 先写位置参数, 然后在写关键字参数. 否则会报错
# 站在形参的角度:
# 1. 位置参数
# 2. 默认值参数
# 3. 默认值参数和位置参数混合使用. 顺序: 先写位置参数. 然后在写默认值参数
接受的总是元组 这是重点
# 1. 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
#
# dic = {"k1":"v1", "k2":[11,22]}
# PS:字典中的value只能是字符串或列表
#
# def func(dic):
# new_dic = {}
# for k, v in dic.items():
# if len(v) > 2:
# new_dic[k] = v[0:2]
# else:
# new_dic[k] = v
# return new_dic
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# print(func(dic))
 
# 动态接收关键字参数
# *位置参数
# **关键字参数
# def func(**food): # **food动态接收关键字参数
# print(food) # 接收到的是字典
#
# func(good_food="盖浇饭", bad_food="辣条", drink="冰封") #输出 :{'good_food': '盖浇饭', 'bad_food': '辣条', 'drink': '冰封'}
# def func(**food):
# print(food)
# func(goodfood="盖浇饭",badfood="辣条",drink="可口可乐") #输出;{'goodfood': '盖浇饭', 'badfood': '辣条', 'drink': '可口可乐'}
# 关键字参数一定在位置参数后面
# 位置参数 > *args > 默认值 > **kwargs
# 把列表中的每一个元素作为参数, 传递给函数. 一次都传过去
#
def func(*args, **kwargs): # *表示聚合,所有的位置参数,* 聚合成元组 **聚合成字典
print(args)
print(kwargs)
#
dic = {"name":"太白", "alex":"wuse"}
lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
func(*lst,**dic) # 实参, 打散, 迭代产生的
func(**dic) # 把字典打散. 以key=value形式进行传参
 
a = 10
def func():
a = 20
print(a) # 就近原则
print(globals()) # globals() 获取到全局作用域(内置,全局)中的所有名字 返回的都是字典类型
print(locals()) # locals() 查看当前作用域中的所有名字 {'a': 20}
func()

#
#######################global  and nonlocal

def func():
global a # a 不再是局部变量. 是全局变量
a = 30 # 把全局中的a重新赋值成30
print(a)
func()
print(a)

# a = 10
# def func1():
#
# def func2():
# nonlocal a # 找局部作用域中 离他最近的那个变量引入进来
# a = 20
# print(a)
# func2()
# print(a)
# func1()
# nonlocal globals()
a = 1
def fun_1():

a=3
def fun_2():
def fun_3():
nonlocal a
a = 4
print(a)
print(a) #2
fun_3() #4
print(a)
print(a) #1
fun_2()#
print(a)
print(a)
fun_1()
print(a)
 
# 重点    如果默认值参数是一个可变的数据类型, 如果有人调用的时候改变了他. 其他位置看到的也跟着改变了
def extendList(val, list=[]):
list.append(val)
return list
list1 = extendList(10)
print('list1=%s' % list1) # list = [10]

list2 = extendList(123, [])
print('list2=%s' % list2) #

list3 = extendList('a') # list = [10, 'a']
print('list3=%s' % list3)
 
 


 

猜你喜欢

转载自www.cnblogs.com/pxxandfdd/p/9965297.html