一,作业讲解
‘‘‘
5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
8、写函数,接收两个数字参数,返回比较大的那个数字。
9、写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的批量修改操作(进阶)。
def func8(path,old,new):
pass
func8(log,alex,sb)
10、写一个函数完成三次登陆功能,再写一个函数完成注册功能(进阶)
‘‘‘
#2、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
# def func1(argv):
# l1 = []
# for i in range(len(argv)):
# if i % 2 == 1:
# l1.append(argv[i])
# return l1
# print(func1([1,2,3,4]))
# def func1(argv):return argv[1::2]
# print(func1([1,2,3,4]))
# 3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
# def func2(argv):
# if len(argv) > 5:
# return True
# else:return False
# print(func2(‘fdsafsdagfdsa‘))
# def func2(argv):
# return True if len(argv) > 5 else False
# print(func2(‘fdsafsdagfdsa‘))
# def func2(argv):
# return len(argv) > 5
# print(func2(‘1‘))
# 4、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def func3(argv):
# l1 = []
# if len(argv) > 2:
# l1 = argv[:2]
# else:
# l1 = argv
# return l1
# func3([1,2,3,4])
#
# def func3(argv):
# return argv[:2] if len(argv) > 2 else argv
# func3([1,2,3,4])
#
# def func3(argv):
# return argv[:2]
# # func3([1,2,3,4])
# l1 = [1]
# print(l1[:2])
# 5、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数,并返回结果。
# def func4(argv):
# dic = {‘digit‘:0,‘alpha‘:0,‘space‘:0,‘other‘:0}
# for i in argv:
# if i.isdigit():
# dic[‘digit‘] += 1
# elif i.isalpha():
# dic[‘alpha‘] += 1
# elif i.isspace():
# dic[‘space‘] += 1
# else:
# dic[‘other‘] += 1
# return ‘数字%d,字母%d,空格%d,其他%d‘ % (dic[‘digit‘],dic[‘alpha‘],dic[‘space‘],dic[‘other‘])
#
# print(func4(‘fdsafd [email protected]#$%^fdf123 哈佛撒旦‘))
# 6、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容,并返回结果。
# 7、写函数,检查传入字典的每一个value的长度(列表,字符串),如果大于2,
# 那么仅保留前两个长度的内容,并将新内容返回给调用者。
# def func6(argv):
# for i in argv:
# if len(argv[i]) > 2:
# argv[i] = argv[i][:2]
# return argv
#
# print(func6({"k1": "vv11", "k2": [11,22,33,44]}))
#
# def func6(argv):
# for i in argv:
# argv[i] = argv[i][:2]
# return argv
#
# print(func6({"k1": "vv11", "k2": [11,22,33,44]}))
二、今日大纲
01,昨日内容回顾
函数初始。
函数是封装一个功能。
def login():
函数体
return:1,结束函数。
2,#return 单个数。1;[].
return 多个值。1,2,3
login() == (1,2,3)
传参:
实参:
1,位置传参,按顺序一一对应。
def func(a,b,c):
pass
func(1,2,3)
2,关键字传参,可以不按顺序,但是必须一一对应。
def func(a,b,c):
pass
func(c=3,a=1,b=2)
3,混合传参,关键字参数在位置参数之后。
def func(a1,b1,a,b,c):
pass
func(2,5,c=3,a=1,b=2)
形参:
1,位置传参,按顺序一一对应。
def func(a,b,c):
pass
func(1,2,3)
2,默认传数,默认参数在位置参数后面。
def func(name,sex=‘男‘):
pass
func(‘李佳芮‘)
func(‘哼哼‘,‘女‘)
3,动态参数。
三元运算:
z = a if a > b else b
02,作业讲解
03,动态参数 *args **kwargs
形参角度:
最终顺序:位置参数,*args,默认参数,**kwargs
04,名称空间(命名空间),临时名称空间,内置名称空间。
全局名称空间,名称空间,命名空间,全局命名空间。
局部命名空间,临时名称空间,临时命名空间,局部名称空间,。
内置名称空间,所有的内置函数等存储的空间。
加载顺序:
内置名称空间 ---> 全局名称空间--->(函数执行时)局部名称空间。
取值顺序:
函数执行时:局部名称空间 -->全局名称空间 -->内置名称空间
05,全局作用域,局部作用域。
全局作用域:全局名称空间,内置名称空间
局部作用域:局部名称空间
06,加载顺序与取值顺序。
07,函数的嵌套。
08,locals(),golbals()
09,nonlocal,golbal。
三、动态参数
# def func(*args):
# print(args)
# func(1,2,3,4,5,7,8,9,1,2,3,4,5,6,7,8)
#*args 动态参数,万能参数
#args接受的就是实参对应的 所有位置参数,并将其放在元组中。
#形参对应顺序:
#位置参数,*args,默认参数
# def func(a,b,c,d,*args,e=‘男‘):
# print(a)
# print(b)
# print(c)
# print(d)
# print(args)
# print(e)
# func(1,2,3,4,5,6,7,e=‘女‘)
#**kwargs 动态传参,他将所有的关键字参数(无意义的)放到一个字典中。
# def func(a,b,c,**kwargs):
# print(kwargs)
# func(1,2,r=4,b1=5,c1=6,c=7,)
# def func(a,b,c,d,*args,e=‘男‘,**kwargs):
# print(a)
# print(b)
# print(c)
# print(d)
# print(args)
# print(e)
# print(kwargs)
# func(1,2,3,4,5,6,7,v=3,m=7,h=9,e=‘女‘)
# 最终顺序:位置参数,*args,默认参数,**kwargs
# def func1(*args,**kwargs):
# pass
# func1()
# * 魔法运用
# def func(*args):
# print(args) #(1,2,30,1,2,33.。。。。。)
# l1 = [1,2,30]
# l2 = [1,2,33,21,45,66]
# tu = (1,2,3)
# func(1,2,30,1,2,33,21,45,66)
# func(*‘qweqrfdsaf‘)
# func(*{‘name‘:‘alex‘,"age":12})
# func(*l1,*l2)
# def func(*args):
# print(args)
# func(1,2,3,10,20,80)
# def func(**kwargs):
# print(kwargs)
#
# dic1 = {‘name1‘:‘alex‘,‘age1‘:46}
# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}
# func(**dic1,**dic2)
# 在函数的调用执行时,
# *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args。
# **字典,代表打散,将所有键值对放到一个kwargs字典里。
# 在函数定义时, *args,**kwargs代表的是聚合。
# def func(*args,**kwargs):
# print(args)
# print(kwargs)
#
# dic1 = {‘name1‘:‘alex‘,‘age1‘:46}
# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}
# func(*[1,2,3,4],*‘asdfsad‘,**dic1,**dic2)
def func(*args,**kwargs):
#args = (1,2,3,4)
#kwargs = {‘age‘: 56, ‘name‘: ‘老男孩‘}
# print(*args)
# print(**kwargs) #(age = 56 ,name = 老男孩)
# dic1 = {‘name1‘:‘alex‘,‘age1‘:46}
# dic2 = {‘name‘:‘老男孩‘,‘age‘:56}
# # func(*[1,2,3,4],*‘asdfsad‘,**dic1,**dic2)
# func(**dic2)
四、名称空间、临时名称空间
# a = 4
# b = 3
# c = [1,2,3,4]
# c1 = {‘name‘:‘alex‘}
#
# def func1():
# name = ‘老男孩‘
# print(name)
# func1()
#当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系,
# 随着函数的执行完毕,临时空间自动关闭。
#input(),print(),len 内置函数
# name = ‘老男孩‘
# def func1():
# name = ‘taibai‘
# print(name)
# func1()
# def my_len(argv):
# return 666
# print(len([12,3,]))
a = 2
print(a)
def func1():
age = 11
print(age)
func1()
五、函数的嵌套
# 函数什么时候执行? 函数调用的时候执行。
# 代码从上至下依次执行, 调用函数:函数里面从上至下依次执行。
# print(111)
# def func1():
# print(333)
#
# def func2():
# print(444)
#
# def func3():
# print(555)
# func2()
#
# func1()
# print(222)
# 111 333 222
# print(111)
# def func1():
# print(333)
# func2()
# print(666)
#
# def func2():
# print(444)
#
# def func3():
# print(555)
#
# func1()
# print(222)
# 111 333 444 666 222
# print(111)
# def func1():
# print(333)
# func2()
# print(666)
#
# def func2():
# print(444)
# func3()
#
# def func3():
# print(555)
#
# func1()
# print(222)
# 111 333 444 555 666 222
# a = 2
# b = 3
# def func1():
# c = 5
# d = 6
# print(globals()) # 全局变量放在一个字典中
# return locals() # {‘c‘: 5, ‘d‘: 6}
# print(func1())
# print(globals()) # 全局名称空间:所有变量
# print(locals()) # 局部名称空间:所有变量