01 内容回顾
- 函数是以功能为导向,减少重复代码,提高代码的可读性。
def func():
函数体- 函数的调用:func()
- 函数的返回值return
- 终止函数
def func():
count = 1
while 1:
count += 1
print(count)
return
func() # 2- return 单个值
- return 多个值:(1,2,3,'hhh')
- 函数的参数:
- 实参角度:位置参数,关键字参数,混合参数。
- 形参角度:位置参数,默认参数。
02 练习
# 3.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
# def func(x):
# return True if x > 5 else False
# def func(x):
# return len(x) > 5
# print(func('154544'))
# 7.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# dic = {"k1": "v1v1", "k2": [11,22,33,44]}
# PS:字典中的value只能是字符串或列表
# def func(dic):
# new_dic = {}
# for key,value in dic.items():
# new_dic[key] = value[:2]
# return new_dic
# print(func(dic))03 函数的参数2
- 万能参数
- *args:
# def eat(a,b,c,d):
# print('我请你吃:%s,%s,%s,%s'%(a,b,c,d))
#
# eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅')
# def eat(a,b,c,d,e,f):
# print('我请你吃:%s,%s,%s,%s,%s,%s'%(a,b,c,d,e,f))
#
# eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅','腊肉','酱鸡')
# 急需要一种形参,可以接受所有的实参。# 万能参数
# 万能参数:*args, 约定俗称:args
# * 函数定义时,*代表:聚合 将所有的位置参数聚合成一个元组,赋值给args
# def eat(*args):
# print('我请你吃:%s,%s,%s,%s,%s,%s'% args)
#
# eat('蒸羊羔','蒸熊掌','烧花鸭','烧子鹅','腊肉','酱鸡')
# 写一个函数:计算你传入函数的所有的数字的和。
# def func(*args):
# # print(args)
# count = 0
# for i in args:
# count += i
# return count
#
# print(func(1,2,3,4,5,6,7,8,9))- **kwargs:
# **kwargs
# 函数定义时: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给kwargs
# def func(**kwargs):
# print(kwargs)
# func(name='zs',age='18',sex='男')# 万能参数:*args **kwargs
# def func(*args,**kwargs):
# print(args)
# print(kwargs)
# func()
# * ** 在函数调用时,* 代表打散
# def func(*args,**kwargs):
# print(args)
# print(kwargs)
# func([1,2,3],[11,22]) # ([1, 2, 3], [11, 22])
# func(*[1,2,3],*[11,22]) # (1, 2, 3, 11, 22)
# func({'name':'zs'},{'age':18}) # ({'name': 'zs'}, {'age': 18})
# func(**{'name':'zs'},**{'age':18}) # () {'name': 'zs', 'age': 18}- 形参角度参数的顺序:
# 形参角度的参数顺序
# def func(a,b,*args,name='hhh',**kwargs):
# print(a,b)
# print(name)
# print(args)
# print(kwargs)
# func(1,2,3,4,5,name='kkk',sex='男',age='18')
# 形参角度第四个参数:仅限关键字参数
# 形参角度的最终顺序:位置参数,*args,默认参数,仅限关键字参数,**kwargs03 名称空间
- 全局名称空间
- 局部名称空间(临时名称空间):
- 内置名称空间:
# 内置名称空间:Python源码给你提供的一些内置的函数,print input# Python分为三个空间:
# 内置名称空间 (builtins.py)
# 全局名称空间 (当前py文件)
# 局部名称空间 (函数,函数内部执行时才开辟)
# 加载顺序:
# 内置名称空间 全局名称空间 局部名称空间(函数执行时)
# 取值顺序(就近原则) 单向不可逆
# name = 'zs'
# def func():
# name = 'kk'
# print(name)
# func() # kk
# print(name) # zs05 作用域与高阶函数与glbals(),locals()
作用域
# 作用域:
# 两个作用域:
# 全局作用域 : 内置名称空间 全局名称空间
# 局部作用域 : 局部名称空间
# 局部作用域可以引用全局作用域的变量
# data = '周三'
# def func():
# a = 666
# print(data)
# func()
# print(a) # 报错
# 局部作用域不能改变全局变量
count = 1
def func():
count = 100 # 不叫修改 在局部创建了一个新的
# count += 1 # local variable 'count' referenced before assignment
print(count)
func()
# 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了对一个变量进行的修改操作
# 解释器会认为在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。高阶函数
# 高阶函数
def func():
count = 1
def inner():
# count += 1 # 报错
print(count)
inner()
func()三个例题
# 例1: # def func1(): # print('in func1') # print(3) # # def func2(): # print('in func2') # print(4) # # func1() # print(1) # func2() # print(2) # in func1 # 3 # 1 # in func2 # 4 # 2 # 例2: # def func1(): # print('in func1') # print(3) # # def func2(): # print('in func2') # func1() # print(4) # # print(1) # func2() # print(2) # 1 # in func2 # in func1 # 3 # 4 # 2 # 例3: def func2(): print(2) def func3(): print(6) print(4) func3() print(8) print(3) func2() print(5) # 3 # 2 # 4 # 6 # 8 # 5
glbals(),locals()
a = 1
b = 2
def func():
name = 'hhh'
age = 18
print(globals()) # 返回字典:字典里的键值对:全局作用域的所有内容。
print(locals()) # 返回字典:字典里的键值对:当前作用域的所有内容。
















