我是Python新手,但是我嘗試了一些東西,但對我來說卻是模棱兩可的。 爲什麼Python允許在循環中定義函數的def?以及我如何從中受益?爲什麼Python允許循環裏面的def函數
for i in range(2):
def f():
print 'f'
f()
我是Python新手,但是我嘗試了一些東西,但對我來說卻是模棱兩可的。 爲什麼Python允許在循環中定義函數的def?以及我如何從中受益?爲什麼Python允許循環裏面的def函數
for i in range(2):
def f():
print 'f'
f()
那麼因爲python是一種高級編程語言,你可以實際返回函數。以下是一個簡單但具有說明性的功能。
def multiplier(multiple):
def f(number):
return multiple * number
return f
您可以使用該功能如下:
double = multiplier(2)
print double(3)
這將打印6.
同樣的概念也適用於循環,如果你想使多種功能,例如,並將它們存儲在列表或任何其他目的適合您的需求。現在
你可以叫list_of_functions [0
](),這將打印 'f' 和list_of_functions [1
(),這將打印 'FF'。
您可以在任何地方定義功能!因爲Python以這種方式是動態的,所以您可以在運行時創建函數(以及類,以及其他任何東西)。很難想出一個簡單的例子,說明爲什麼你想要做到這一點,而不是看起來有些做作,但用例肯定存在。
假設你正在編寫一個簡單的處理框架。您將允許用戶鍵入命令,這將導致某些功能運行。您可以先定義這些函數,然後將它們全部存儲在字典中,以便在獲取用戶輸入時快速查找適當的函數以運行。
def define_functions(letters):
commands = {} # dictionary of commands
for letter in letters:
# Define functions dynamically
if letter == 'f':
def _function():
print('foo')
elif letter == 'b':
def _function():
print('bar')
elif letter == 'z':
def _function():
print('baz')
else:
def _function():
print('Unknown command')
# Add the new function to the dictionary with the key "n squared"
commands[letter] = _function
return commands
commands = define_functions('abcdefghijklmnopqrstuvwxyz')
# Now we have a dictionary of functions.
while True: # loop forever
# Ask for input and run the specified function!
func_name = raw_input('Enter the one-letter name of the function to run: ')
if func_name not in commands:
print("sorry, that function isn't defined.")
break
# Look up the function
func = commands.get(func_name)
# Call the function
func()
這是Python允許def的任何地方的副作用。如果您願意,可以將函數定義存儲在數組中。 – Max