函数(def)

时间:2022-12-30 02:31:55

一、为什么要使用函数:

面向过程的编程在代码里有很多代码是可以重复利用的,如果使用面向过程编程会使代码显得纷繁复杂,不利于他人和自己日后的阅读。而在函数式编程里,则可以把每个可重复利用的功能封装在一个函数里,当用的时候可以直接调用这个函数,使代码更加的简洁、易读。

二、函数的定义方式:

 def f1():
pass

1、def:函数关键字
2、f1:函数名

3、():形式参数(变量的作用)

三、执行函数:

1、方式:f1():

2、函数体执行完毕有return值,赋值给f1(),默认返回值为None。

3、函数在代码里不执行,只有在调用时才执行。

4、f1()代表的实际参数。

四、参数:

函数在传递参数时传递的是变量的引用而非再次创建新的内存。

 def f1(a):
a.append(9)
li=[11,22,33,44]
f1(li)
print(li)

1、普通参数:有几个形式参数就传几个实际参数,默认按顺序一 一对应。

 def f1(name,age):
print(name)
print(age)
f1("Guido",27)

2、默认参数:可以通过变量的形式指定参数,默认参数要放在参数列表的最后面。

 1 def f1(name,age,who="you")
2 print(name,age,who)
3 f1("guido",27) #who="you"
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格式化:

 S1="I am {0}, age {1}".format("Guido",27)
print(S1)
S2="I am {0}, age {1}".format(*["alex",18])
print(S2)
S3="I am {name},age {age}".format(age=27,name="Guido")
print(S3)
dic={"name":"Guido","age":27}
S4="I am {name},age {age}".format(**dic)
print(S4)

五、全局变量(所有作用域都可用):
1、函数体本身就是一个作用域,作用域内的变量只有本作用域内才可以使用。

2、局部变量优先在作用域内使用,没有再到全局变量里找到并使用。

3、在作用域内可以对全局变量不可重新赋值,但可以修改。

4、在作用域内若想修改全局变量,必须使用global。

 NAME=("Guido")
def f1()
global name
name=("admirers")
print(name)
f1()
print(name)

5、全局变量要是用大写:NAME

六、三元(三目)运算:

三元运算又叫三目运算,其实就是if...else...的简写方式

 if 1==1:
name=("Guido")
else:
name=("admirers") 三元运算表达式:
name=("Guido") if 1==1 else name=("admirers")

七、lambda表达式(可描述简单的函数):

 def f1(a,b):
return a+100 f2=lambda a,b : a+100

八、实例:

1、登录注册

 def login(username,password):
'''
用户登录
username:用户输入用户名
password:用户输入密码
return:True登陆成功
False登录失败
'''
f=open("text","r")
for line in f:
line_list=line.strip().split("@")
if line_list[0]==username and line_list[1]==password:
return True
return False def register(username,password):
'''
用户注册
username:用户名
password:密码
return:None默认
'''
f=open("text","a")
temp=(\n" + username + "@" + password)
f.write(temp)
f.close() def main():
t=input("1:登陆;2:注册")
if t=="":
user=input("请输入用户名:")
pwd=input("请输入密码:)
r=login(user,pwd)
if r:
print("登陆成功")
else:
print("登陆失败")
elif t=="":
user=input("请输入用户名:")
pwd=input(”请输入密码:“)
register(user,pwd)

2、发邮件(武沛齐老师范例)

 import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr msg = MIMEText('邮件内容', 'plain', 'utf-8')
msg['From'] = formataddr(["武沛齐",'wptawy@126.com'])
msg['To'] = formataddr(["走人",'424662508@qq.com'])
msg['Subject'] = "主题" server = smtplib.SMTP("smtp.126.com", 25)
server.login("wptawy@126.com", "邮箱密码")
server.sendmail('wptawy@126.com', ['424662508@qq.com',], msg.as_string())
server.quit()