秋風蕭瑟
1.在乙個函式的命名空間中給乙個變數賦全域性的值,要把該變數賦為global
a=none
def bind_a_variable():
global a
a=bind_a_variable()
print(a)
2.一般情況下函式返回多個物件時,會返回乙個tuple。但是也可以返回乙個dict,有時候會有妙用!
def f():
a=5b=6
c=7return
>>> f()
3.函式是物件
假設在做資料清洗的時候需要對下列string組成的list進行轉換:
states = [' alabama ', 'georgia!', 'georgia', 'georgia', 'florida',
'south carolina##', 'west virginia?']
一種轉換的方法是:使用string的內建方法和使用re標準庫的正規表示式:
import re
states = [' alabama ', 'georgia!', 'georgia', 'georgia', 'florida',
'south carolina##', 'west virginia?']
def clean_strings(strings):
result=
for value in strings:
value=value.strip()
#s.strip(rm) 刪除s字串中開頭、結尾處,位於 rm刪除序列的字元
# 當rm為空時,預設刪除空白符(包括'\n', '\r', '\t', ' ')
value=re.sub('[!#?]','',value)
value=value.title()
#python title() 方法返回"標題化"的字串,就是說所有單詞都是以大寫開始,其餘字母均為小寫
print(result)
return result
clean_strings(states)
輸出結果如下:
['alabama',
'georgia',
'georgia',
'georgia',
'florida',
'south carolina',
'west virginia']
另一種方法是使用函式來完成上述操作:
#這樣寫的很巧妙,很美
import re
states = [' alabama ', 'georgia!', 'georgia', 'georgia', 'florida',
'south carolina##', 'west virginia?']
def remove_punctuation(value):
return re.sub('[!#?]','',value)
clean_ops=[str.strip,remove_punctuation,str.title]
def clean_strings(strings,ops):
result=
for value in strings:
for function in ops:
value=function(value)
print(result)
return result
clean_strings(states)
還可以把函式作為其他函式的引數,上面的問題(部分,只刪除!#?)還可以這樣寫:
import re
states = [' alabama ', 'georgia!', 'georgia', 'georgia', 'florida',
'south carolina##', 'west virginia?']
def remove_punctuation(value):
return re.sub('[!#?]','',value)
for x in map(remove_punctuation,states):
print(x)
alabama
georgia
georgia
georgia
florida
south carolina
west virginia
4. lambda(匿名)函式
為什麼叫匿名函式:不像其他用def宣告的函式,匿名函式從來不用明顯的__name__屬性。
def f(x):
return x*2
answer=lambda x:x*2
例如:return [f(x) for x in some_list]
ints=[4,0,1,5,6]
>>>[8, 0, 2, 10, 12]
另外乙個例子:
根據string集合裡的每個字串中不同字母的個數排序
(很巧妙!!嘆服)
strings=['foo','card','bar','aaaa','abab']
string.sort(key=lambda x:len(set(list(x))))
>>>['aaaa','foo','abab','bar','card']
#根據不同字母數從小到大排序
5. curring:使用partical改變方法預設引數
在電腦科學中,柯里化(英語:currying),又譯為卡瑞化或加里化,是把接受多個引數的函式變換成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回接受餘下的引數而且返回結果的新函式的技術。這個技術由 christopher strachey 以邏輯學家哈斯凱爾·加里命名的,儘管它是 moses schönfinkel 和gottlob frege 發明的。
這是來自維基百科的名詞解釋。顧名思義,柯里化其實本身是固定乙個可以預期的引數,並返回乙個特定的函式,處理批特定的需求。這增加了函式的適用性,但同時也降低了函式的適用範圍。
簡單理解(目前可能用不上):
先定義乙個很簡單的函式,把兩個數加起來:
def add_num(x,y):
return x+y
使用此函式,可以得到乙個新的含有乙個變數的函式add_five,把5加到它的引數上:
add_five=lambda y:add_num(5,y)
add_num的第二個引數就被稱為curried。就是在乙個已經存在的函式上定義乙個新函式。
內建模組functools使用partial 函式可以簡化此操作:
from functools import partial
add_five=partial(add_num,5)
print(add_five(2))
>>>7
6. 生成器(generators)
有乙個一致的方法來遍歷序列
,像list中的物件,或文章中的行,是python的重要特徵。這是通過迭代器協議完成的。
大家加油哦~
學習python內一般函式知識
目錄 一 函式定義 二 函式編寫說明文件 三 函式的返回值 四 函式引數 1 位置引數與關鍵字引數 2 預設引數 3 可變長引數 4 可變關鍵字引數 五 作用域 1 全域性變數 2 區域性變數 3 global關鍵字 4 內嵌函式與 nonlocal關鍵字 5 閉包 6 遞迴 7 lambda匿名函...
建構函式和一般函式
建構函式 構建創造物件時呼叫的函式,作用 可以給物件進行初始化。建立物件都必須要通過建構函式初始化。如果乙個類中沒有定義建構函式,那麼該類中就會有乙個預設的無參建構函式。如果在類中定義了指定的建構函式,那麼類中的預設建構函式就沒有了。建構函式和一般函式有什麼區別呢?建構函式 物件建立時,就會呼叫與之...
一般時控函式
隨著軟硬體的飛速發展,計算機技術已經廣泛地應用到自動化控制領域,為了實現實時控制,控制程式必須能夠精確地完成定時和計時功能。vc提供了很多關於時間操作的函式,下面根據它們精度的不同,分別進行說明。一般時控函式 vc程式設計師都會利用windows的wm timer訊息對映來進行簡單的時間控制 1.呼...