Python語法細節知識點(一)

  1. 在Linux或Mac平臺直接運行.py文件,像window系統中的.exe文件一樣,window系統會自動忽略這句話
#!/usr/bin/env python3
  1. 告訴Python解釋器,按照UTF-8編碼讀取源代碼
# -*- coding: utf-8 -*-
  1. Python允許用 r"" 表示 " 內部的字符串默認不轉義
str = r"abc/t/n"
print(str)
# 打印內容 abc/t/n
  1. Python允許用’’’…’’'的格式表示多行內容,且裏面的內容不會被轉義

  2. 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保存到文件:

  3. Python提供了 ord() 函數獲取字符的整數表示,chr() 函數把編碼轉換爲對應的字符:

	str = '中'
    print(ord(str))
    print(chr(97))
    # 20013 a
  1. 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")) 	#我愛你中國
  1. Python 使用 % 或者 format 進行格式化字符串,使用%進行格式化,對於字符串裏面包含%的str,使用“%%”進行轉義
print("%s,您好,%s" % ("Scott","歡迎光臨"))
print("{0}的小數點前兩位是{1:.2f}".format("PI",3.1415926))
print("%s今年的數學成績提高了%.2f%%" % ("小明",(86-72)/72*100)) #小明今年的數學成績提高了19.44%
  1. 可變參數,*+變量名表示可變參數,可變參數在函數調用時自動組裝爲一個tuple
	def addNum(*num):
		sum=0;
		for i in num:
			sum += i
		return sum
  1. 關鍵字參數,允許傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。使用 **+變量名 表示關鍵字參數
  2. 命名關鍵字參數,參數需要一個特殊分隔符 *,*後面的參數被視爲命名關鍵字參數。
def person(name, age, *, city='Beijing', job):
    print(name, age, city, job)
  1. 切片,list,tuple,str都可以被切[start : end : step]
[:] 						獲得所有元素
[index:-1]			從後往前切
[::step]				每隔step切
  1. Python內置的 enumerate函數可以把一個list變成索引-元素對
# 遍歷字典
    for key, value in dict.items():
        print(key,value)
# 遍歷列表並且有索引
    for index, item in enumerate(num):
       print(index,item)
  1. 列表生成式
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]
  1. 生成器,使用 () 或者yield關鍵字
  2. isinstance(item,type)用來判斷item是否屬於type類型的
  3. map(function,iterable),map將傳入的函數依次作用到序列的每個元素,並把結果作爲新的Iterator返回
  4. reduce,把一個函數作用在一個序列[x1, x2, x3, …]上,reduce把結果繼續和序列的下一個元素做累積計算
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    
  5. nonlocal n 聲明變量n爲 非內部函數的局部變量,可以引用外部定義的變量(基本數據類型),這樣內部修改的話其變量,就不會報錯了
  6. 匿名函數lambda x: x * x
    	關鍵字lambda表示匿名函數,冒號前面的x表示函數參數
    
  7. @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;
    
  8. functools.partial的作用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單
    def decoratorLog(func):
    @functools.wraps(func)
    def wrapp(*args, **kwargs):
        print("call %s()" % (func.__name__));
        func(*args, **kwargs)
    return wrapp;
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章