簡體   English   中英

列表中的Python函數

[英]Python functions within lists

所以今天在計算機科學中我問過將函數用作變量。 例如,我可以創建一個函數,例如returnMe(i)並創建一個用於調用它的數組。 h = [help,returnMe]然后我可以說h1,它會調用returnMe("Bob") 對不起,我對此感到有些興奮。 我的問題是有一種方法可以調用h.append(def function)並定義一個只存在於數組中的函數嗎?

編輯:

這是我用這個寫的一些代碼! 所以我剛剛用這個解決方案完成了一個很棒的FizzBu​​zz,非常感謝你! 這是代碼的例子:

funct = []
s = ""

def newFunct(str, num):
    return (lambda x: str if(x%num==0) else "")

funct.append(newFunct("Fizz",3))
funct.append(newFunct("Buzz",5))

for x in range(1,101):
    for oper in funct:
        s += oper(x)
    s += ":"+str(x)+"\n"

print s

您可以使用lambda關鍵字創建匿名函數。

def func(x,keyword='bar'):
    return (x,keyword)

大致相當於:

func = lambda x,keyword='bar':(x,keyword)

因此,如果要創建包含函數的列表:

my_list = [lambda x:x**2,lambda x:x**3]
print my_list[0](2)  #4
print my_list[1](2)  #8

不是在Python中。 正如mgilson所示,您可以使用簡單的函數執行此操作,但它們只能包含表達式,而不能包含語句,因此非常有限(例如,您無法分配給變量)。

當然,這在其他語言中是受支持的:例如,在Javascript中,創建實質性的匿名函數並傳遞它們是非常慣用的事情。

您可以在原始范圍中創建函數,將它們分配給數組,然后從原始范圍中刪除它們。 因此,您確實可以從數組中調用它們,但不能將其作為局部變量。 我不確定這是否符合您的要求。

#! /usr/bin/python3.2

def a (x): print (x * 2)
def b (x): print (x ** 2)

l = [a, b]

del a
del b

l [0] (3) #works
l [1] (3) #works
a (3) #fails epicly

您可以創建一個lambda函數列表,按0到9之間的每個數字遞增,如下所示:

increment = [(lambda arg: (lambda x: arg + x))(i) for i in range(10)]
increment[0](1) #returns 1
increment[9](10) #returns 19

邊注:

我認為同樣重要的是要注意這個(函數指針不是lambdas)有點像python如何在大多數類中保存方法,除了代替列表,它是一個函數名稱指向函數的字典。 在許多但並非所有情況下, instance.func(args)等同於instance.__dict__['func'](args)type(class).__dict__['func'](args)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM