wordmhg 2020-03-08
总结:
返回值数=0:返回None
返回值数=1:返回object
返回值数>1:返回tuple
3.1形参和实参
动态参数顾名思义就是可以动态的去扩展函数参数的数量!
例子:1 (多个单个变量,整合成元组)
参数组:*列表,**字典 例:def test(x,*args,**kwargs)def func(*args):
print args
# 执行方式一
func(11,33,4,4454,5)
#输出结果:11,33,4,4454,5
# 执行方式二
li = [11,2,2,3,3,4,54]
func(li)
#输出结果:([11,2,2,3,3,4,54])
#如果想输入的列表,不想让列表称谓元组里的仅一个元素而是让列表的元素成为元组的元素加*即可
func(*li)
#输出结果:(11,2,2,3,3,4,54)
#############################################################
1、接受多个参数
2、内部自动构造元组
3、序列,*,避免内部构造元组
def func(**kwargs): print args # 执行方式一 func(name=‘luotianshuai‘,age=18) # 执行方式二 li = {‘name‘:‘luotianshuai‘, age:18, ‘gender‘:‘male‘} func(**li)
def func(*args, **drgs): print args print dargs #例子: func(11,22,33,44,k1=‘luotianshuai‘,k2=‘shuaige‘) (11, 22, 33, 44) {‘k2‘: ‘shuaige‘, ‘k1‘: ‘luotianshuai‘}
#发邮件的案例: import smtplib from email.mime.text import MIMEText from email.utils import formataddr def email(message): msg = MIMEText("邮件报警测试", ‘plain‘, ‘utf-8‘) msg[‘From‘] = formataddr(["shuaige",‘‘]) #发件人和发件邮箱 msg[‘To‘] = formataddr(["帅哥",‘‘]) msg[‘Subject‘] = message #这里我调用了参数 server = smtplib.SMTP("smtp.test.com", 25) server.login("", "pwdnq.buzhidao") server.sendmail(‘‘, [‘‘,], msg.as_string()) server.quit() if __name__ == u‘__main__‘: cpu = 100 disk = 500 ram = 50 for i in range(1): if cpu > 90: alert = u‘CPU出问题了‘ #这里设置了一个变量 email(alert) #这里调用函数的时候引用了上面的变量,当执行函数的时候形参讲会被替换掉,message=‘CPU出问题了‘ 发送邮件! if disk > 90: alert = u‘硬盘出问题了‘ email(alert) if ram> 80: alert = u‘内存出问题了‘ email(alert)
lambda x(形参):x+1(返回值),函数名=lambda 形参:功能(不写函数名也可以,将简单函数书写成匿名函数)
‘‘‘例子1‘‘‘ li = [11,22,33] def func1(arg): return arg + 1 #这里乘除都可以 new_list = map(func1,li) #这里map调用函数,函数的规则你可以自己指定,你函数定义成什么他就做什么操作! print new_list 输出结果:[12, 23, 34] ‘‘‘例子2‘‘‘ li = [‘shuaige‘,‘nihao‘,] def func1(arg): return ‘%s test string‘ % arg #或者使用+进行拼接万恶的+能不用最好不用他会在内存中开辟新的空间! new_strlist = map(func1,li) print new_strlist 输出结果:[‘shuaige test string‘, ‘nihao test string‘] ‘‘‘例子3‘‘‘ li = ‘abcdefg‘ def func1(arg): return ‘%s test string‘ % arg new_list = map(func1,li) print new_list #结果:[‘a test string‘, ‘b test string‘, ‘c test string‘, ‘d test string‘, ‘e test string‘, ‘f test string‘, ‘g test string‘] map例子
使用lambda表达式:
li = [11,22,33,44,55] new_li = map(lambda a:a + 100,li) print new_li #输出结果: [111, 122, 133, 144, 155] #多个列表操作: l1 = [11,22,33,44,55] l2 = [22,33,44,55,66] l3 = [33,44,55,66,77] print map(lambda a1,a2,a3:a1+a2+a3,l1,l2,l3) #输出结果: [66, 99, 132, 165, 198] #这里需要注意如果使用map函数列表中的元素必须是相同的才可以!否则就会报下面的错误! #TypeError: unsupported operand type(s) for +: ‘int‘ and ‘NoneType‘,如果看下面 l1 = [11,22,33,44,55] l2 = [22,33,44,55,66] l3 = [33,44,55,66,] #l3的数据少一个,如果元素里的元素为空那么他调用的时候这个元素就是None lambda表达式
例子:
from functools import reduceli = [1,2,3,4,5,6,7,8] result = reduce(lambda a1,a2:a1+a2,li) #累乘、除、加、减 print result # reduce的第一个参数,函数必须要有两个参数,因为他是两两进行操作 # reduce的第二个参数,要循环的序列 # reduce的第三个参数,初始值 #初始值 li = [1,2,3,4,5,6,7,8] result = reduce(lambda a1,a2:a1+a2,li,100000) #累乘、除、加、减 print result
默认参数:
例子:
li = [11,22,33,44,55,66,77,88] print filter(lambda a:a>33,li) 输出结果:[44, 55, 66, 77, 88] movie_people=["hellp_sb","tres_sb","yeyhd"] print(list(filter(lambda n:not n.endwith(“sb”),movie_people)))
abs() #取绝对值 all() #把序列中每个元素取出作布尔运算 #所有的元素为真才是真,否则为假(传入为空,返回为Ture) any()#把序列中每个元素取出作布尔运算 #所有的元素为真才是真,否则为假(传入为空,返回为False) #十进制转二进制 bin( ) #十进制转十六进制 Oct() #十进制转八进制 hex() #字符串转字节 bytes() #用什么解码就要用什么编码 name="你好“ print(bytes(name,encoding="utf-8"))#编码 print(bytes(name.encoding("utf-8").decode("utf-8")) #ASCII码不能编码中文, print(char(9)) #dir 打印某个对象下的所有方法 #divmod应用在分页中,例子:总共有10条数据,每页3条数据,那要分几页,余一则要分成4页 divmod(10,3)====输出结果:(3,1) #eval 将字符串中的数据结果提取出来; dic_str="{"name","alex"}" eval(dic_str) 输出结果:{"name","alex"} #eval 把字符串中的表达式进行运算; express="1+2*(3/3-1)-2" express="1+2*(3/3-1)-2" eval(express) 输出结果:-1.0 #可hash的数据类型即可变的数据类型 #不可hash的数据类型即不可变的数据类型 hash() #判断数据类型是TRUE isinstance() #打印局部变量 locals() #打印全局变量 globals() #zip()的用法 print(list(zip("a","b","c"),(1,2,3)) p={"name":"alex","age"=18,"gender":"None"} print(list(zip(p.keys(),p.values()) #max() dic={"name":"alex","age"=18,"gender":"None"} print(max(dic)) #默认比较的是字典的key #比较的是字典的key,但是不知道是哪个key对应的 print(max(dic.values(0)) #结合zip使用 print(max(zip(dic.values(),dic.keys()) #max函数处理的是可迭代对象,相当于一个for循环取出每个元素进行比较,注意:不同类型之间不能进行比较 #2.每个元素之间进行比较,是从每个元素的第一个位置依次比较,如果这一个位置分出大小,后面则无需比较了,直接得出这2个元素的大小。 #reversed()反转 #sorted 排序就是比较大小,不同类型之间不能比较大小 dic={"name":"alex","age"=18,"gender":"None"} print(sorted(zip(dic.values(),dic.keys())