函数
Posted bijian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数相关的知识,希望对你有一定的参考价值。
1、形参与实参
形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定。
2、参数类型
2.1 位置参数:按照从左到右的顺序定义的参数。 位置形参:必选参数 位置实参:按照位置给形参传值
2.2 关键字参数:按照key=value的形式定义的实参,无需按照位置为形参传值
注意:(1)关键字实参必须在位置实参右面 (2)对同一个形参不能重复传值
2.3 默认参数:形参在定义时就已经为其赋值,可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)。
注意:(1)只在定义时赋值一次(2)默认参数的定义应该在位置形参右面(3)默认参数通常应该定义成不可变类型
2.4 可变长参数:可变长指的是实参值的个数不固定,而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs。
2.5 命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递,可以保证,传入的参数中一定包含某些关键字。
#-------------*args---------------- def a(x,y,*args): print(x,y,args) a(1,2,3,4,5,6) # 1 2 (3, 4, 5, 6) a(1,2,*[3,4,5,6]) # 1 2 (3, 4, 5, 6) def a(x,y,z): print(x,y,z) a(*[1,2,3]) # 1 2 3
#-------------**kwargs-------------- def a(x,y,**kwargs): print(x,y,kwargs) a(1,2,b=3,c=4,d=5) # 1 2 {‘b‘: 3, ‘c‘: 4, ‘d‘: 5} a(1,y=2,b=1,c=2,d=3) # 1 2 {‘b‘: 1, ‘c‘: 2, ‘d‘: 3} a(1,2,**{"b":4,"c":5,"d":6}) def a(x,y,z): print(x,y,z) a(**{"z":4,"y":5,"x":6})#必须一样 # 6 5 4
#---------*args+**kwargs------------- def a(x,y): print(x,y) def b(*args,**kwargs): print("----") a(*args,**kwargs)
def a(x,y,*args,a=1,b,**kwargs): print(x,y) print(args) print(a) print(b) print(kwargs) a(1,2,3,4,5,b=3,c=4,d=5)
3、摘录别人的练习题:
3.1 写函数,,用户传入修改的文件名,与要修改的内容,执行函数,完成批了修改操作。
def modify_file(filename,old,new): import os with open(filename,‘r‘,encoding=‘utf-8‘) as read_f, open(‘.bak.swap‘,‘w‘,encoding=‘utf-8‘) as write_f: for line in read_f: if old in line: line=line.replace(old,new) write_f.write(line) os.remove(filename) os.rename(‘.bak.swap‘,filename) modify_file(‘/Users/jieli/PycharmProjects/爬虫/a.txt‘,‘alex‘,‘SB‘)
3.2 写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数。
def check_str(msg): res={ ‘num‘:0, ‘string‘:0, ‘space‘:0, ‘other‘:0, } for s in msg: if s.isdigit(): res[‘num‘]+=1 elif s.isalpha(): res[‘string‘]+=1 elif s.isspace(): res[‘space‘]+=1 else: res[‘other‘]+=1 return res res=check_str(‘hello name:aSB passowrd:alex3714‘) print(res)
3.3 写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
#略
3.4 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
def func1(seq): if len(seq) > 2: seq=seq[0:2] return seq print(func1([1,2,3,4]))
3.5 写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func2(seq): return seq[::2] print(func2([1,2,3,4,5,6,7]))
3.6 写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
dic = {"k1": "v1v1", "k2": [11,22,33,44]} PS:字典中的value只能是字符串或列表
def func3(dic): d={} for k,v in dic.items(): if len(v) > 2: d[k]=v[0:2] return d print(func3({‘k1‘:‘abcdef‘,‘k2‘:[1,2,3,4],‘k3‘:(‘a‘,‘b‘,‘c‘)}))
以上是关于函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中创建构造函数的代码片段或快捷方式