python手冊學習筆記1

筆記1

> http://www.pythondoc.com/pythontutorial3/controlflow.html

  • 參數傳遞 Python中sys.argv的用法

調用解釋器時,腳本名和附加參數傳入一個名爲 sys.argv 的字符串列表。你可以獲取這個列表經過執行 import sys,列表的長度大於等於1;沒有給定腳本和參數時,它至少也有一個元素:sys.argv[0] 此時爲空字符串。腳本名指定爲 '-' (表示標準輸入)時, sys.argv[0] 被設定爲 '-',使用 -c 指令 時,sys.argv[0] 被設定爲 '-c'。使用 -m 模塊 參數時,sys.argv[0] 被設定爲指定模塊的全名。-c 指令 或者 -m 模塊 以後的參數不會被 Python 解釋器的選項處理機制所截獲,而是留在 sys.argv 中,供腳本命令操做。html

*test.py*
import sys
print(sys.argv)
print(sys.argv[1]

>>>python test.py -c -m
...['test.py','-c','-m']
...-c
  • 字符串替換

Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),若是指定第三個參數max,則替換不超過 max 次。python

str.replace(old, new[, max])函數

  • old -- 將被替換的子字符串。
  • new -- 新字符串,用於替換old子字符串。
  • max -- 可選字符串, 替換不超過 max 次
a = 'hello world'
b = a.replace('world','python')
print(b)

...hello python
  • enumerate() 函數

enumerate() 函數用於將一個可遍歷的數據對象(如列表、元組或字符串)組合爲一個索引序列,同時列出數據和數據下標,通常用在 for 循環當中。工具

enumerate(sequence, [start=0])code

  • sequence -- 一個序列、迭代器或其餘支持迭代對象。
  • start -- 下標起始位置。
a = ['abc','def','ghi']
b = list(enumerate(a))
print(b)
for i,j in enumerate(a):
    print(i,j)

...[(0, 'abc'), (1, 'def'), (2, 'ghi')]
...0 abc
...1 def
...2 ghi

實際上enumerate就是個可迭代對象,可用如下方法實現:htm

def enumerate(sequence, start=0):
    n = start
    for elem in sequence:
        yield n, elem
        n += 1
  • 循環中的 else 子句

循環能夠有一個 else 子句;它在循環迭代完整個列表(對於 for )或執行條件爲 false (對於 while )時執行,但循環被 break 停止的狀況下不會執行。如下搜索素數的示例程序演示了這個子句:對象

for n in range(2, 10):
     for x in range(2, n):
         if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
     else:
         print(n, 'is a prime number')

...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
  • 文檔字符串

函數體的第一行語句能夠是可選的字符串文本,這個字符串是函數的文檔字符串,或者稱爲 docstring。(更多關於 docstrings 的信息請參考 文檔字符串) 有些工具經過 docstrings 自動生成在線的或可打印的文檔,或者讓用戶經過代碼交互瀏覽;在你的代碼中包含 docstrings 是一個好的實踐,讓它成爲習慣吧。索引

def test():
    '''
    doc test
    '''   
    print('test')
    
print(test.__doc__)

... doc test
  • 函數變量

函數 調用 會爲函數局部變量生成一個新的符號表。確切的說,全部函數中的變量賦值都是將值存儲在局部符號表。變量引用首先在局部符號表中查找,而後是包含函數的局部符號表,而後是全局符號表,最後是內置名字表。所以,全局變量不能在函數中直接賦值(除非用 global 語句命名),儘管他們能夠被引用。文檔

函數引用的實際參數在函數調用時引入局部符號表,所以,實參老是 傳值調用 (這裏的 值 老是一個對象 引用 ,而不是該對象的值)。 一個函數被另外一個函數調用時,一個新的局部符號表在調用過程當中被建立。字符串

一個函數定義會在當前符號表內引入函數名。函數名指代的值(即函數體)有一個被 Python 解釋器認定爲 用戶自定義函數 的類型。 這個值能夠賦予其餘的名字(即變量名),而後它也能夠被當作函數使用。這能夠做爲通用的重命名機制:

def test():
    print('test')

>>>test
...<function test at 10042ed0>
>>>f = test
>>>f
...test

----------
a = 100
def test(n):
    a = 200
    print('test%d%d'%(n,a))
test(3)
print (a)

...test3200
...100

----------
a = 100
def test(n):
    global a
    a = 200
    print('test%d%d'%(n,a))
test(3)
print (a)

...test3200
...200
  • 函數的位置參數與關鍵字參數

  • 位置參數:調用函數時根據函數定義的參數位置來傳遞參數
def test(a,b=100,c='haha'):
    print(a,b,c)
test(2)# positional argument

...2 100 haha
  • 關鍵字參數:用於函數調用,經過「鍵-值」形式加以指定。可讓函數更加清晰、容易使用,同時也清除了參數的順序需求,在函數調用中,關鍵字的參數必須跟隨在位置參數的後面。傳遞的全部關鍵字參數必須與函數接受的某個參數相匹配,它們的順序並不重要。這也包括非可選參數。任何參數都不能夠屢次賦值。
正確的調用
test(2,b=50) # 1 positional, 1 keyword
test(a=5,c='hahaha')# 2 keyword arguments

錯誤的調用
test(b=50)
test(c='hahha',5)
test(5,a=10)
  • 可變參數

引入一個形如name 的參數時,它接收一個字典,該字典包含了全部未出如今形式參數列表中的關鍵字參數。這裏可能還會組合使用一個形如 name 的形式參數,它接收一個元組,包含了全部沒有出如今形式參數列表中的參數值( name 必須在 name 以前出現)。

def test(a,*b,**c):
    print(a)
    print(b)
    print(c)
test('a','dsad','dasdad',k='weqeq',y='werrq')

...a
...('dsad', 'dasdad')
...{'k': 'weqeq', 'y': 'werrq'}
  • 參數列表的分拆

另有一種相反的狀況: 當你要傳遞的參數已是一個列表,但要調用的函數卻接受分開一個個的參數值。這時候你要把已有的列表拆開來。例如內建函數 range() 須要要獨立的 start,stop 參數。你能夠在調用函數時加一個 * 操做符來自動把參數列表拆開:

a = [1,10]
b = range(*a)
print(list(b))

...[1, 2, 3, 4, 5, 6, 7, 8, 9]

以一樣的方式,可使用 ** 操做符分拆關鍵字參數爲字典:

tmp = {'a':10,'b':20}
def test(a,b):
    print(a,b)
test(**tmp)

...10 20
  • 匿名函數

lambda表達式,一般是在須要一個函數,可是又不想費神去命名一個函數的場合下使用,也就是指匿名函數。

def get_y(a,b):
     return lambda x:ax+b
y1 = get_y(1,1)

>>>y1(1)
...2
  • 獲取對象屬性並執行

getattr() 是 python 的內建函數,getattr(object,name) 就至關於object.name可是這裏 name 能夠爲變量

def test(a,b):
    '''
    dsadad
    '''
    print(a,b)
def get(n):
    for i in dir(n):
        print(getattr(test,i))
get(test)
  • 函數註解

函數註解在定義函數的時候對參數和返回值添加註解

  • a: int 這種是註解參數
  • c: str = 5 是註解有默認值的參數
  • -> tuple 是註解返回值。
def test(a: int, b: "it's b", c: str = 5) -> tuple:
    return a, b, c
print(test.__annotations__)

...{'a': int, 'b': "it's b", 'c': str, 'return': tuple}
相關文章
相關標籤/搜索