iT邦幫忙

0

在python中調用函數一定要在函數後面才能調用嗎?有沒有變通的方法?有沒有子程序可以調用?

  • 分享至 

  • xImage

有時候只是希望調用函數來完成那個功能而已
偏偏調用函數一定要在函數後面才能被調用(按鍵精靈可以自由調用)
我希望可以在最上層就可以自由調用下面的3個函數
該如何做?
函數1()---不能調用
函數2()---不能調用
函數3()---不能調用

def 函數1():
print("1")

函數1()---可以調用

def 函數2():
print("2")

函數3() ---這樣就不能調用?

def 函數3():
print("3")

目前我只想到這個笨笨的辦法
這樣我要啟動哪一個函數功能的話
直接在最上方的程式碼就可以變相調用函數內的功能了.

call_f1=1
call_f2=1
call_f3=1

def f1():
print("f1")
if call_f1 == 1:
f1()
def f2():
print("f2")
if call_f2 == 1:
f2()
def f3():
print("f3")
if call_f3 == 1:
f3()

看更多先前的討論...收起先前的討論...
froce iT邦大師 1 級 ‧ 2023-06-13 13:03:53 檢舉
python是script語言,基本上就是逐行讀取的,所以一定得這樣。
fdfanmo iT邦新手 5 級 ‧ 2023-06-13 13:30:44 檢舉
目前只想到上面那個方法來變相調用
froce iT邦大師 1 級 ‧ 2023-06-15 10:28:37 檢舉
有集中維護的需求,我會建議直接寫一個settings.py,把設定集中在一個檔案啦。
python沒有像js的Hoisting,搞這種變體維護上並沒有比較方便。
fdfanmo iT邦新手 5 級 ‧ 2023-06-15 11:38:31 檢舉
謝謝froce大我再研究看看如何寫
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
熊熊工程師
iT邦研究生 1 級 ‧ 2023-06-13 13:12:28
最佳解答

你可以試試看寫成一個 class,可以看到在 function_b 裡面透過呼叫 self 對 function_c 進行調用

class Demo:
    def function_a(self):
        pass
    
    def function_b(self):
        self.function_c()
    
    def function_c(self):
        pass
看更多先前的回應...收起先前的回應...
fdfanmo iT邦新手 5 級 ‧ 2023-06-13 13:29:01 檢舉

謝謝幫忙解答喔~

搭一下熊熊工程師的便車:請問class是python內必學的吧?因為我的書本沒有提到。

寫程式的方式粗略分為兩種,細分可以分很多,一種式 class based 可以理解成常聽到的物件導向,另一種是 function based 就是指整個系統的組成皆是使用 function 組成

fdfanmo iT邦新手 5 級 ‧ 2023-06-15 11:37:56 檢舉

class我還不是很會寫..>_<

froce iT邦大師 1 級 ‧ 2023-06-15 15:52:52 檢舉

搭一下熊熊工程師的便車:請問class是python內必學的吧?因為我的書本沒有提到。

是也不是,如果你寫程式只是自娛自樂那class你一生都不會寫也沒啥差,只是出去外面要找工作的話一定會被吐槽到死。

物件導向對於某些設計模式來說是很好用的,要在不支援/不完整支援物件導向的語言來實踐某些設計模式的同等功能,有時候得繞一大圈。

1
小魚
iT邦大師 1 級 ‧ 2023-06-13 21:13:20

你可以把函式寫在另外一個檔案,
然後引用那個檔案

fdfanmo iT邦新手 5 級 ‧ 2023-06-15 11:39:13 檢舉

好的~原來可以這樣使用.
我找時間測試看看我會寫嗎.

jeffeux iT邦新手 4 級 ‧ 2023-06-25 02:56:02 檢舉

例如寫一個 myfunctions.py
然後

from myfunctions import f1, f2, f3

for func in [f1, f2, f3]:
    func()

像這樣
https://gist.github.com/jeffeuxMartin/cac7065a0b7d26cfcb6aa8df5460db4d

fdfanmo iT邦新手 5 級 ‧ 2023-06-26 12:26:54 檢舉

謝謝jeffeux的解說~
這樣我懂了

0
淺水員
iT邦大師 6 級 ‧ 2023-06-14 14:07:14
call_list = ["f1", "f2", "f3"]

def f1():
    print("f1")

def f2():
    print("f2")

def f3():
    print("f3")

for function_name in call_list:
    globals()[function_name]()

參考資料:https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-by-using-its-name-a-string

fdfanmo iT邦新手 5 級 ‧ 2023-06-15 11:40:10 檢舉

各位大師都好強.實在讓人佩服

我要發表回答

立即登入回答