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()
函數中的return
-
def f1():
-
print(123)
-
#在函數中,一旦執行return,函數執行過程立即終止
-
return "111"
-
print(456)
-
-
r = f1()
-
print(r)
函數的默認返回值None
-
def 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)
callable()查看函數是否可以被調用,返回True或False
-
def f1():
-
pass
-
f1()
-
-
f2 = 123
-
-
print(callable(f1))
-
print(callable(f2))
chr()與ord()
-
r = chr(65)
-
n = ord("B")
-
print(r,n)
產生1個隨機大寫字母:
-
import random
-
i = random.randrange(65,91)
-
print(chr(i))
產生6個隨機大寫字母:
-
import random
-
li = []
-
for i in range(6):
-
temp = random.randrange(65,91)
-
c = chr(temp)
-
li.append(c)
-
result = "".join(li)
-
print(result)
隨機產生字母加數字:
-
import random
-
li = []
-
for i in range(6):
-
r = random.randrange(0,6)
-
if r == 2 or r == 4:
-
num = random.randrange(0,10)
-
li.append(str(num))
-
else:
-
temp = random.randrange(65,91)
-
c = chr(temp)
-
li.append(c)
-
result = "".join(li)
-
print(result)
compile():將字符串編譯成python代碼
exec():執行python代碼或字符串,無返回值
eval():執行表達式,有返回值
-
s = "print(123)"
-
#先編譯,single、eval、exec
-
#將字符串編譯成python代碼
-
r = compile(s,"<string>","exec")
-
print(r)
-
#然后執行
-
exec(r)
-
-
s = "8*8"
-
ret = eval(s)
-
print(ret)
dir()快速查看對象提供了哪些功能
-
print(dir(dict))
divmod()計算商和余數
-
r = divmod(97,10)
-
print(r)
isinstance()判斷對象是否是某個類的實例
-
s = [11,22,33]
-
r = isinstance(s,list)
-
print(r)
filter():函數返回True,將元素添加到結果中
map():將函數返回值添加到結果中
將列表中大於22的數輸出
-
def f1(args):
-
result = []
-
for item in args:
-
if item > 22:
-
result.append(item)
-
return result
-
-
li = [11,22,33,44,55,66,78]
-
ret = f1(li)
-
print(ret)
filter()實現
-
#filter(函數,可迭代的對象)
-
def f2(a):
-
if a > 22:
-
return True
-
-
li = [11,22,33,44,55,66,78]
-
#filter內部會循環第二個參數,將每個循環元素執行第一個函數,如果函數返回值是True,就添加到ret中
-
ret = filter(f2,li)
-
print(list(ret))
filter()+lambda實現
-
li = [11,22,33,44,55,66,78]
-
ret = filter(lambda a : a > 22,li)
-
print(list(ret))
將列表中每個元素加100
-
def f1(args):
-
result = []
-
for i in args:
-
result.append(i+100)
-
return result
-
-
li = [11,22,33,44,55,66,78]
-
r = f1(li)
-
print(list(r))
map()實現
-
#map(函數,可迭代的對象)
-
def f2(a):
-
return a + 100
-
-
li = [11,22,33,44,55,66,78]
-
result = map(f2,li)
-
print(list(result))
map()+lambda實現
-
li = [11,22,33,44,55,66,78]
-
result = map(lambda a : a + 100,li)
-
print(list(result))
hash():生成hash值
-
s = "hhhh"
-
print(hash(s))
max():返回最大值
min():返回最小值
sum():返回和
pow():指數計算
-
r = pow(2,10)
-
print(r)
reverse():反轉
round():四舍五入
sorted():排序
zip()
-
#獲取字符串 s = "alex_is_good_guy"
-
l1 = ["alex",22,33,44,55]
-
l2 = ["is",22,33,44,55]
-
l3 = ["good",22,33,44,55]
-
l4 = ["guy",22,33,44,55]
-
-
r = zip(l1,l2,l3,l4)
-
temp = list(r)[0]
-
ret = '_'.join(temp)
-
print(ret)
裝飾器
s1:
-
def outer():
-
print("log")
-
-
def f1():
-
outer()
-
print("F1")
-
def f2():
-
outer()
-
print("F2")
-
-
def f100():
-
outer()
-
print("F100")
b1:
-
import s1
-
-
s2.f1()
-
s2.f2()
-
s2.f100()
裝飾器實現
s1:
-
def outer(func):
-
def inner():
-
print("log")
-
return func()
-
return inner
-
-
@outer
-
def f1():
-
print("f1")
-
-
@outer
-
def f2():
-
print("f2")
-
-
@outer
-
def f100():
-
print("f100")
b1:
-
import s1
-
-
s2.f1()
-
s2.f2()
-
s2.f100()
在調用函數前后輸出內容
-
def outer(func):
-
def inner():
-
print("log")
-
ret = func()
-
print("after")
-
return ret
-
return inner
求輸出內容:
一:
-
def f1():
-
print("123")
-
-
def f2(xxx):
-
xxx()
-
-
f2(f1)
二:
-
def f1():
-
print("123")
-
-
def f1():
-
print("234")
-
-
f1()
傳參一:
s1:
-
def outer(func):
-
def inner(a):
-
print("log")
-
ret = func(a)
-
print("after")
-
return ret
-
return inner
-
-
@outer
-
def f1(arg):
-
print(arg)
-
return "砍你"
b1:
-
import s:1
-
-
s2.f1("hahahaha")
參數二:
s1:
-
def outer(func):
-
def inner(*args,**kwargs):
-
print("log")
-
ret = func(*args,**kwargs)
-
print("after")
-
return ret
-
return inner
-
-
@outer
-
def f1(arg):
-
print(arg)
-
return "砍你"
-
-
@outer
-
def f2(arg1,arg2):
-
print(arg1,arg2)
-
print("f2")
b1:
-
import s1
-
-
s2.f1("hahahaha")
-
-
s2.f2("111","222")
查詢字符串是否包含子字符串:
-
#in方法
-
str = "hsaoiuo kkaoioweioew"
-
if "iowe" in str:
-
print("存在")
-
else:
-
print("不存在")
-
-
#fand方法
-
str = "hsaoiuo kkaoioweioew"
-
if str.find("iowe") == -1:
-
print("不存在")
-
else:
-
print("存在")