函数(def)
一、为什么要使用函数:
面向过程的编程在代码里有很多代码是可以重复利用的,如果使用面向过程编程会使代码显得纷繁复杂,不利于他人和自己日后的阅读。而在函数式编程里,则可以把每个可重复利用的功能封装在一个函数里,当用的时候可以直接调用这个函数,使代码更加的简洁、易读。
二、函数的定义方式:
1 def f1(): 2 pass
1、def:函数关键字
2、f1:函数名
3、():形式参数(变量的作用)
三、执行函数:
1、方式:f1():
2、函数体执行完毕有return值,赋值给f1(),默认返回值为None。
3、函数在代码里不执行,只有在调用时才执行。
4、f1()代表的实际参数。
四、参数:
函数在传递参数时传递的是变量的引用而非再次创建新的内存。
1 def f1(a): 2 a.append(9) 3 li=[11,22,33,44] 4 f1(li) 5 print(li)
1、普通参数:有几个形式参数就传几个实际参数,默认按顺序一 一对应。
1 def f1(name,age): 2 print(name) 3 print(age) 4 f1("Guido",27)
2、默认参数:可以通过变量的形式指定参数,默认参数要放在参数列表的最后面。
1 1 def f1(name,age,who="you") 2 2 print(name,age,who) 3 3 f1("guido",27) #who="you" 4 4 f1("guido",27,"she") #who=“she”
3、动态参数:
(1)多接收值的形式参数(*args)输出形式为tuple:
普通输入实际参数:传几个可按顺序接收几个。
输入(*args)的实际参数:会把arges所指向的内容做一个for循环,把每个元素分别传入形式参数。
(2)多接收值的形式参数(**kwargs)输出形式为dict:
实际参数必须有key=value
实际参数f1(**dic)把dic的内容整体以字典的形式传入(**kwargs)中
(3)万能参数:
def f1(*args,**kwargs)
(4)可变长参数:
def f1(a,*b,**c)
def i(kargs, *args, **kwargs): print(kargs,type(kargs)) print(args,type(args)) print(kwargs,type(kwargs)) i("kdk","111","ppp","uuu",a=1,b=2,c=3)
4、format格式化:
1 S1="I am {0}, age {1}".format("Guido",27) 2 print(S1) 3 S2="I am {0}, age {1}".format(*["alex",18]) 4 print(S2) 5 S3="I am {name},age {age}".format(age=27,name="Guido") 6 print(S3) 7 dic={"name":"Guido","age":27} 8 S4="I am {name},age {age}".format(**dic) 9 print(S4)
五、全局变量(所有作用域都可用):
1、函数体本身就是一个作用域,作用域内的变量只有本作用域内才可以使用。
2、局部变量优先在作用域内使用,没有再到全局变量里找到并使用。
3、在作用域内可以对全局变量不可重新赋值,但可以修改。
4、在作用域内若想修改全局变量,必须使用global。
1 NAME=("Guido") 2 def f1() 3 global name 4 name=("admirers") 5 print(name) 6 f1() 7 print(name)
5、全局变量要是用大写:NAME
六、三元(三目)运算:
三元运算又叫三目运算,其实就是if...else...的简写方式
1 if 1==1: 2 name=("Guido") 3 else: 4 name=("admirers") 5 6 三元运算表达式: 7 name=("Guido") if 1==1 else name=("admirers")
七、lambda表达式(可描述简单的函数):
1 def f1(a,b): 2 return a+100 3 4 f2=lambda a,b : a+100
八、实例:
1、登录注册
1 def login(username,password): 2 ''' 3 用户登录 4 username:用户输入用户名 5 password:用户输入密码 6 return:True登陆成功 7 False登录失败 8 ''' 9 f=open("text","r") 10 for line in f: 11 line_list=line.strip().split("@") 12 if line_list[0]==username and line_list[1]==password: 13 return True 14 return False 15 16 17 def register(username,password): 18 ''' 19 用户注册 20 username:用户名 21 password:密码 22 return:None默认 23 ''' 24 f=open("text","a") 25 temp=(\n" + username + "@" + password) 26 f.write(temp) 27 f.close() 28 29 30 def main(): 31 t=input("1:登陆;2:注册") 32 if t=="1": 33 user=input("请输入用户名:") 34 pwd=input("请输入密码:) 35 r=login(user,pwd) 36 if r: 37 print("登陆成功") 38 else: 39 print("登陆失败") 40 elif t=="2": 41 user=input("请输入用户名:") 42 pwd=input(”请输入密码:“) 43 register(user,pwd)
2、发邮件(武沛齐老师范例)
1 import smtplib 2 from email.mime.text import MIMEText 3 from email.utils import formataddr 4 5 6 msg = MIMEText('邮件内容', 'plain', 'utf-8') 7 msg['From'] = formataddr(["武沛齐",'wptawy@126.com']) 8 msg['To'] = formataddr(["走人",'424662508@qq.com']) 9 msg['Subject'] = "主题" 10 11 server = smtplib.SMTP("smtp.126.com", 25) 12 server.login("wptawy@126.com", "邮箱密码") 13 server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string()) 14 server.quit()