python教育学_跟着老男孩教育学Python开发【第三篇】:Python函数
set
無序,不重復,可嵌套。
函數
創建函數:
1、def關鍵字,創建函數
2、函數名
3、()
4、函數體
5、返回值
發郵件函數def sendmail():
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
#三個參數:第一個為文本內容,第二個 plain 設置文本格式,第三個 utf-8 設置編碼
msg = MIMEText(‘郵件內容‘,‘plain‘,‘utf-8‘)
msg[‘From‘] = formataddr(["發件人名稱",‘發件人郵箱‘])
msg[‘To‘] = formataddr(["哈哈",‘收件人郵箱‘])
msg[‘Subject‘] = "郵件主題"
server = smtplib.SMTP("smtp地址",端口)
#需要在開啟SMTP,否則發送失敗
server.login("發件人郵箱","密碼")
server.sendmail(‘發件人郵箱‘,[‘收件人郵箱‘],msg.as_string())
server.quit()
sendmail()
函數中的returndef f1():
print(123)
#在函數中,一旦執行return,函數執行過程立即終止
return "111"
print(456)
r = f1()
print(r)
函數的默認返回值Nonedef f2():
print(123)
r = f2()
print(r)
普通參數#形參【形式參數】:xx
def sendmail(xx,content):
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
#捕獲異常
try:
msg = MIMEText(content,‘plain‘,‘utf-8‘)
msg[‘From‘] = formataddr(["Golden",‘發件人地址‘])
msg[‘To‘] = formataddr(["哈哈",‘收件人地址‘])
msg[‘Subject‘] = "主題"
server = smtplib.SMTP("smtp.126.com",25)
server.login(‘發件人地址‘,‘密碼‘)
server.sendmail(‘發件人地址‘,[xx],msg.as_string())
server.quit()
except:
#發送失敗
return False
else:
#發送成功
return True
#實際參數:收件人1\收件人2
# ret = sendmail("收件人1")
# ret = sendmail("收件人2")
while True:
em = input("請輸入收件人郵箱地址:")
result = sendmail(em,"你好")
if result == True:
print("發送成功")
else:
print("發送失敗")
默認參數def send(xx,content,hh="ok"):
print(xx,content,hh)
print("發送郵件成功:",xx,content)
return True
send("hahaha",‘hello‘)
send("hahaha",‘hello‘,‘bbbb‘)
注意:如果需要給某個參數指定默認值,該參數必須放在參數列表的最后。
指定參數def send(xx,content):
print(xx,content)
return True
send("hahaha","hello")
send(content="hahaha",xx="hello")
動態參數:*def f1(*args):
print(args,type(args))
f1(11,22,33,"haha","hello")
li = [12,23,33,"hahaha","hi"]
f1(li)
f1(*li)
注意:*默認將傳入的參數全部放置在元組中,f1(*li)。
動態參數:字典(**)def f1(**args):
print(args,type(args))
f1(n1="alex",kk=18)
dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘}
f1(**dic)
注意:**默認將傳入的參數全部放置在字典中,f1(**dic)。
萬能參數def f1(*args,**kwargs):
print(args)
print(kwargs)
f1(11,22,33,44,k1=‘v1‘,k2=‘v2‘)
注意:*args,**kwargs順序不能改變。
動態參數實現format功能s = "i am {0},age {1}".format("alex",18)
print(s)
s1 = "i am {0},age {1}".format(*["alex",19])
print(s1)
s2 = "i am {name},age {age}".format(age=20,name=‘alex‘)
print(s2)
dic ={‘name‘:‘alex‘,‘age‘:21}
s3 = "i am {name},age {age}".format(**dic)
print(s3)
猜一猜輸出def f1(a1,a2):
print(‘+‘)
return a1 + a2
def f1(a1,a2):
print(‘*‘)
return a1 * a2
ret = f1(8,8)
print(ret)
def f1(a1):
a1.append(999)
li = [11,22,33,44]
f1(li)
print(li)
注意:函數參數傳遞的是引用。
全局變量NAME = "alex"
AGE = 22
def f1():
num = 18
NAME = "haha"
#修改全局變量:age
global AGE
AGE = 25
print(num,AGE,NAME)
def f2():
num = 19
print(num,AGE,NAME)
f1()
f2()
注意:全局變量重新賦值需要用global,對于列表或字典,可修改,不可重新賦值。定義全局變量全部大寫。
函數實現登錄與注冊def login(username,password):
"""
用于用戶登錄
:param username: 用戶輸入的用戶名
:param password: 用戶輸入的密碼
:return:True,登錄成功;False,登錄失敗
"""
f = open("db",‘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):
"""
用戶注冊
:param username:用戶名
:param password:密碼
:return:默認返回None
"""
f = open("db",‘a‘)
temp = "\n"+username + "|" + password
f.write(temp)
f.close()
def main():
t = input("1:登錄;2:注冊")
if t == "1":
user = input("請輸入用戶名:")
pwd = input("請輸入密碼:")
r = login(user,pwd)
if r:
print("登錄成功")
else:
print("登錄失敗")
elif t == "2":
user = input("請輸入用戶名:")
pwd = input("請輸入密碼:")
register(user,pwd)
main()
三元運算(三目運算)if 1 == 1:
name = "alex"
else:
name = "golden"
#上面代碼等價于
name = "alex" if 1 == 1 else "golden"
lambda表達式def f1(a1):
return a1 + 100
#等價上面的代碼
f2 = lambda a1:a1 + 100
ret = f1(10)
print(ret)
r2 = f2(9)
print(r2)
內置函數#abs():取絕對值
n = abs(-1)
print (n)
#all():所有為真,才為真
#any():任何一個為真,就是真
n = all([1,2,3,4,[]])
print(n)
n2 = any([1,[],0,"",None])
print(n2)
#ascii():自動執行對象的 _repr_方法
class Foo:
def _repr_(self):
return "111"
n = ascii(Foo())
print(n)
#bin():轉二進制
#oct():轉八進制
#hex():轉十六進制
print(bin(5))
print(oct(9))
print(hex(15))
#utf-8 一個漢字:三個字節
#gbk 一個漢字:二個字節
#utf-8,一個字節八位,一個漢字三個字節
s = "李杰"
#字符串轉換字節類型
#bytes(需要轉換的字符串,按照什么編碼)
n = bytes(s,encoding="utf-8")
print(n)
n = bytes(s,encoding="gbk")
print(n)
#字節轉化成字符串
new_str = str(bytes("李杰",encoding="utf-8"),encoding="utf-8")
#1、打開文件
#只讀
f = open(‘db‘,‘r‘)
#只寫,先清空源文件
f = open(‘db‘,‘w‘)
#文件存在,報錯;不存在,創建并寫內容
f = open(‘db‘,‘x‘)
#追加
f = open(‘db‘,‘a‘)
#2、操作文件
#通過源碼查看功能
f.read()
f.write()
#3、關閉文件
f.close()
with open(‘db‘) as f:
pass
f = open(‘db‘,‘r‘,encoding="GBK")
#f = open(‘db‘,‘r‘,encoding="utf-8")
data = f.read()
print(data,type(data))
f.close()
f = open("db","r+",encoding="utf-8")
#如果打開模式無b,則read,按照字符讀取
data = f.read()
#獲取當前指針的位置(字節)
print(f.tell())
print(data)
#移動當前指針到固定位置(字節)
f.seek(1)
#當前指針位置開始向后覆蓋
f.write("777")
f.close()
f = open(‘db‘,‘rb‘)
data = f.read()
print(data,type(data))
f = open(‘db‘,‘ab‘)
f.write(bytes("李杰",encoding="utf-8"))
f.close()
flush()強刷:f = open("db",‘a‘)
f.write("123")
#強制寫入
f.flush()
input("adsdds")
readable()查看文件是否可讀,返回True或False。f = open("db",‘w‘)
print(f.readable())
readline()僅讀取一行數據,當文件特別大的時候不至于導致內存撐爆。f = open("db",‘r‘)
f.readline()
f.readline()
truncate()截斷,指針后面的數據清空f = open("db",‘r+‘,encoding="utf-8")
f.seek(3)
f.truncate()
f.close()
for循環打開的文件對象:f = open("db",‘r‘)
for line in f:
print(line)
f.close()
將文件1的前十行寫入文件2:with open(‘db1‘,‘r‘,encoding="utf-8") as f1,open(‘db2‘,‘w‘,encoding="utf-8") as f2:
times = 0
for line in f1:
times += 1
if times <= 10:
f2.write(line)
else:
break
將文件的某個字符串進行替換:with open(‘db1‘,‘r‘,encoding="utf-8") as f1,open("db2",‘w‘,encoding="utf-8") as f2:
for line in f1:
new_str = line.replace("alex","st")
f2.write(new_str)
原文:http://www.cnblogs.com/yinshoucheng-golden/p/6116758.html
總結
以上是生活随笔為你收集整理的python教育学_跟着老男孩教育学Python开发【第三篇】:Python函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络训练3次就准确率不变_1组高效徒
- 下一篇: websocket python爬虫_p