python一般函式 python 函式

2021-10-11 17:24:04 字數 3453 閱讀 4228

秋風蕭瑟

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.呼...