- 在Linux或Mac平臺直接運行.py文件,像window系統中的.exe文件一樣,window系統會自動忽略這句話
#!/usr/bin/env python3
- 告訴Python解釋器,按照UTF-8編碼讀取源代碼
# -*- coding: utf-8 -*-
- Python允許用 r"" 表示 " 內部的字符串默認不轉義
str = r"abc/t/n"
print(str)
# 打印內容 abc/t/n
-
Python允許用’’’…’’'的格式表示多行內容,且裏面的內容不會被轉義
-
ASCII編碼和Unicode編碼、UTF-8編碼的區別
ASCII 編碼,最早只有127個字符被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號。 但隨着編程語言的發展,各個國家都有自己制定的編碼,像GB2312(中國),Shift_JIS(日本)等編碼,ASCII碼錶裏的字符遠遠支持不了開發。 所以,Unicode編碼就應運而生,Unicode把所有語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。 Unicode標準也在不斷髮展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。 但是,現在出現了這樣一個問題 A 在ASCII碼錶裏表示的是01000001,而在Unicode裏表示的是00000000 01000001,如果我們書寫的內容是全英的,就會十分浪費內存。 故UTF-8編碼應運而生。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節, 常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符纔會被編碼成4-6個字節
字符 ASCII Unicode2 UTF-8 A 01000001 00000000 01000001 01000001 中 - 00000000 01000001 11100100 10111000 10101101 在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時 候,就轉換爲UTF-8編碼。用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件:
-
Python提供了 ord() 函數獲取字符的整數表示,chr() 函數把編碼轉換爲對應的字符:
str = '中'
print(ord(str))
print(chr(97))
# 20013 a
-
str通過 encode() 方法可以編碼爲指定的bytes,Python對bytes類型的數據用帶 b 前綴的單引號或雙引號表示。
byte轉換爲str,使用 decode() 方法, 如果bytes中只有一小部分無效的字節,可以傳入 errors=‘ignore’ 忽略錯誤的字節:
str = "我愛你中國"
print(str.encode("utf-8")) #b'\xe6\x88\x91\xe6\x84\x9b\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9c\x8b'
b = b'\xe6\x88\x91\xe6\x84\x9b\xe4\xbd\xa0\xe4\xb8\xad\xe5\x9c\x8b\xaa'
print(b.decode("utf-8", errors="ignore")) #我愛你中國
- Python 使用 % 或者 format 進行格式化字符串,使用%進行格式化,對於字符串裏面包含%的str,使用“%%”進行轉義
print("%s,您好,%s" % ("Scott","歡迎光臨"))
print("{0}的小數點前兩位是{1:.2f}".format("PI",3.1415926))
print("%s今年的數學成績提高了%.2f%%" % ("小明",(86-72)/72*100)) #小明今年的數學成績提高了19.44%
- 可變參數,*+變量名表示可變參數,可變參數在函數調用時自動組裝爲一個tuple
def addNum(*num):
sum=0;
for i in num:
sum += i
return sum
- 關鍵字參數,允許傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。使用 **+變量名 表示關鍵字參數
- 命名關鍵字參數,參數需要一個特殊分隔符 *,*後面的參數被視爲命名關鍵字參數。
def person(name, age, *, city='Beijing', job):
print(name, age, city, job)
- 切片,list,tuple,str都可以被切[start : end : step]
[:] 獲得所有元素
[index:-1] 從後往前切
[::step] 每隔step切
- Python內置的 enumerate函數可以把一個list變成索引-元素對
# 遍歷字典
for key, value in dict.items():
print(key,value)
# 遍歷列表並且有索引
for index, item in enumerate(num):
print(index,item)
- 列表生成式
l1 = [i ** 2 for i in range(11)]
list1 = [i if i % 2 == 0 else -i for i in range(10) ]
list2 = [i**3 for i in range(15) if i%2==0]
- 生成器,使用 () 或者yield關鍵字
- isinstance(item,type)用來判斷item是否屬於type類型的
- map(function,iterable),map將傳入的函數依次作用到序列的每個元素,並把結果作爲新的Iterator返回
- reduce,把一個函數作用在一個序列[x1, x2, x3, …]上,reduce把結果繼續和序列的下一個元素做累積計算
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
- nonlocal n 聲明變量n爲 非內部函數的局部變量,可以引用外部定義的變量(基本數據類型),這樣內部修改的話其變量,就不會報錯了
- 匿名函數lambda x: x * x
關鍵字lambda表示匿名函數,冒號前面的x表示函數參數
- @functools.wraps 可以保持當前裝飾器去裝飾的函數的 name 的值不變
def printNowTime(func): functools.wraps(func); def printTimeLog(*args, **kwargs): print("the %s() execute time is %s" % (func.__name__, time.process_time())) func(*args, **kwargs); return printTimeLog;
functools.partial
的作用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單def decoratorLog(func): @functools.wraps(func) def wrapp(*args, **kwargs): print("call %s()" % (func.__name__)); func(*args, **kwargs) return wrapp;