1. 程式人生 > >Python語法命令學習-Day3(零基礎)

Python語法命令學習-Day3(零基礎)

增加 自定義 alex 十六進制 組成 描述符 form smtplib als

一、set #集合

set的定義:集合是無序的,不重復的序列。

1.創建集合

例1:

set()   #創建空集合

例2:

li = [11,22,11,22,3]  #創建列表li 當執行這條命令時候,python內部自動會去執行list()來進行創建列表

s1 = set(li)  #將列表li轉換成集合s1

print(s1)

2.操作集合

例:

s1 = {11,22,33}
s2 = {22,33,44}
a = [‘lich‘,‘dddd‘,999]

  1.s1中存在,但是s2中不存在的元組

    s1.difference(s2)

  2.s1 和s2 中不一致的組成一個set

    s1.symmetric_difference(s2)

  3.提取s1中存在,s2中不存在的元素,並更新並覆蓋s1集合中

    s1.difference_update(s2)

  4.提取s1 和s2 中不一致的組成一個set 更新並覆蓋s1集合中

    s1.symmetric_difference_update(s2)

  5.移除s1集合中的元素‘22’(當集合中沒有該元素時,使用remove 不會有語法報錯)

    s1.remove(22)

  6.移除s1集合中的元素‘22’(當集合中沒有該元素時,使用discard 不會有語法報錯)

    s1.discard(22)

  7.隨機移除一個元素

    s1.pop()

  8.取s1 和 s2交集

    s1.intersection(s2)

  9.取s1 和 s2交集,並覆蓋更新到s1

    s1.intersection_update(s2)

  10.聯合/並集,將s1 和s2 合並

    s1.union(s2)

  11.s1集合中,增加一個元素‘ddd‘

    s1.add(‘ddd‘)

  12.將列表a 全部加入s1集合

    s1.update(a)

二、函數    

1.自定義函數

  發郵件函數

  如下:

def send_mail():
try:
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

msg = MIMEText(‘郵件正文內容‘, ‘plain‘, ‘utf-8‘)
msg[‘From‘] = formataddr([‘顯示的發件人姓名‘, ‘發件人郵箱地址‘])
msg[‘To‘] = formataddr([‘顯示的收件人姓名‘, ‘收件人郵箱地址‘])
msg[‘Subject‘] = ‘郵件主題‘

server = smtplib.SMTP(‘發件箱公網IP/域名‘, 25)
server.login(‘發件人郵箱地址‘,‘發件人郵箱密碼‘) #發件人郵箱和密碼
server.sendmail(‘發件人郵箱地址‘, [‘收件人郵箱地址‘, ], msg.as_string()) #前者郵箱為發件者郵箱,後者為收件人郵箱
server.quit()
except:
#發送失敗時候執行
return False
else:
#發送成功時候執行
return True

ret = send_mail()
if ret == True:
print(‘發送成功‘)
else:
print(‘發送失敗‘)


定義一個函數:
  1.def 是關鍵字,用於創建函數
  2.def 函數名():  #這是標準函數格  
  3.函數體  #函數體中可以實現該函數的具體功能
  4.返回值  #該函數執行後的結果

****定義函數後,函數不會被執行,一旦被調用後 才會被執行****
****在函數中,一旦 執行了return後,函數不在往下執行,函數終止****

2.函數中的參數

  1.普通參數  #(如果給某個參數設置默認參數的話,這個形式參數必須要放到參數列表的最後)
  2.默認參數
  3.指定參數
  4.動態參數
  5.萬能參數  #(*在前面,**在後面)

* (可以接受任意個 實際參數) 默認將傳入的參數,全部放入元祖中。 當傳值時,f1(*[1,2,3,4,5])
** (直接賦值) 默認將傳入的參數,全部放入字典中。

例1:

li = ‘lich‘
f1(*li) #內部做了個for循環,把每一個字母作為一個元素
f1(li) #直接把li的值當作一個元素

例2:

def f1(**args):
print(args,type(args))

f1(n1=‘lich‘,n2=20) #**進入字典模式,把n1 和n2的值進行賦值,n1是key ,lich是value

例3: 萬能參數

def f1(*args,**kwargs):
print(args)
print(kwargs)

f1(11,111,333,4,n1=‘kkk‘,n2=‘ddd‘)

3.函數補充內容(一)

  a.函數的創建,以下面創建的為準,從上至下

  b.函數中傳遞的是引用

  c.全局變量(均可讀,賦值時先global+變量名,全局變量必須大寫,對於列表、字典等特殊情況,只能進行修改值,不能進行賦值)

例1:
def f1(a1):
  a1.append(999)
li = [1,2,3,4]
  f1(li)
  print(li)

#####函數中傳遞的值 是引用,所以a1=li=[1,2,3,4,999]


例2:
name = ‘lich‘
name2 = [1,2,3,4]
def f1():
  global name #修改全局變量重新賦值的開關
  name = ‘alex‘ #修改了全局變量name

def f2():
  print(name2)
  name2.append(999) #對於特殊的,‘列表’、‘字典’、‘元祖’ 可以直接修改,但是不可重新賦值

***自己本身函數體中的變量,只能在本函數體中進行調用,所以f2中的name 壓根沒有定義,所以無法調用;如果定義了全局變量後,在每個函數體中分別調用***

***如果在自己函數體中定義了name後,在本函數體中調用name時,優先調用自己本函數體中的變量,如果本函數體沒有name變量,則去全局變量中找name變量***

***定義全局變量的時候,一定都要大寫***

4.內置函數

  #abs() 取絕對值
  #all() 如果()中的所有元素都為真,則all()輸出為真,只要有一個為False,則all()輸出為False
  #0 = False , None = False ,空的[]/()/{} = False
  #any() 任意有真元素,則any()為真
  #acsii() 自動會去執行對象的__repr__方法
  #bin() 接收一個十進制,輸出一個二進制
  #oct() 接收一個十進制,輸出一個八進制
  #hex() 接收一個十進制,輸出一個十六進制
  #bool() 布爾值

  #bytes() 標準格式:bytes(需要轉換的字符串,‘按照什麽編碼‘)   字符串轉換成字節類型只能通過bytes來轉

*****

對於utf-8 編碼 一個漢字占3個字節
對於GBK編碼 一個漢字占2個字節

*****

例如:

s = ‘李傑‘
bytes(s,encoding=‘utf-8‘) #使用utf-8 轉換成字節類型
bytes(s,encoding=‘gbk‘) #使用utf-8 轉換成字節類型

#str() 字節轉換成字符串 (在轉換成字符串時候,也需要用相同的編碼進行轉換)
例如:str(bytes(‘李傑‘,encoding=‘utf-8‘),encoding=‘utf-8‘)

5.文件操作

  1.打開文件-操作文件-關閉文件

  • f=open(‘db‘,‘r‘) 只讀
  • f=open(‘db‘,‘w‘) 只寫,先清空源文件
  • f=open(‘db‘,‘x‘) 如果文件存在,會發生報錯;如果不存在,就新建這個文件並只寫
  • f=open(‘db‘,‘a‘) 追加
  • f=open(‘db‘,‘xb‘) 告訴python 不要對文件進行編碼轉換處理,直接輸出二進制給我
  • f=open(‘db‘,‘wb‘) 告訴python 不要對文件進行編碼轉換處理,直接輸出二進制給我
  • f=open(‘db‘,‘rb‘) 告訴python 不要對文件進行編碼轉換處理,直接輸出二進制給我
  • r+ 可讀 可寫 (最常用,可以以seek()進行定位,隨便在哪寫)
  • a+ 可讀 可寫 (每次寫的時候,不能定位,只能末尾追加)
  • w+ 可讀 可寫 (將原來內容清空,再進行寫入)
  • x+ 可讀 可寫
  • r+b 讀寫都是字節
  • ###只要有b 都是字節,沒有b 則按字符進行讀寫

  2.操作文件

  • read() #無參數,讀全部;如有參數,/1.有b 按字節; /2.無b,按字符
  • teel() #獲取當前指針位置
  • seek(1) #跳轉到指針指定位置 (按字節來讀寫)
  • write() #寫數據,和打開方式也有關系 有b,寫字節;無b,寫字符。
  • close() #關閉
  • fileno() #文件描述符
  • flush() #強制刷新到硬盤,見pycharm
  • readline() #讀取第一行
  • 在上面命令之後,再輸入readline() #則讀取第二行了 ,因為指針在移動,所以才讀取第二行
  • truncate #用來截斷,根據seek()的指針位置,將後面所有內容清除

for循環文件對象 f = open(xxx)
for line in f
  print(line)

  3.關閉文件

  • 1.f.close()

  例:with open(‘xb‘) as f:

      pass

  • 通過with同時打開n個文件

  例:with open(‘db1‘) as f1, open(‘db2‘) as f2

      pass

  • 3.替換文件中部分內容

6.三元運算

if 1 == 1:
  name = ‘alex‘
else:
  name = ‘sb‘

上下兩個一樣一樣的

name = ‘alex‘ if 1 == 1 else ‘sb‘ #三元運算


7.lambdab表達式

例:
def f1(a1):
  return a1 + 100
ret = f1(10)
print(ret)
上述簡單函數 可以用lambda表達式書寫
  f2 = lambda a1:a1 +100

Python語法命令學習-Day3(零基礎)