変数を渡した後に他の関数を後で呼び出す関数を作成する方法はありますか?渡された引数の名前の関数を作成する関数
たとえば、私はget_search_engine_xml
<engines>
<engine address="https://www.google.com/">Google</engine>
<engine address="https://www.bing.com/">Bing</engine>
<engine address="https://duckduckgo.com/">DuckDuckGo</engine>
</engines>
でそれを呼び出し、ここに私のコードだときのは、このxmlファイルhttps://example.com/engine_listリターンをふりましょう:
import re
import requests
import xml.etree.ElementTree as ET
base_url = 'https://example.com'
def make_safe(s):
s = re.sub(r"[^\w\s]", '', s)
s = re.sub(r"\s+", '_', s)
s = str(s)
return s
# This is what I'm trying to figure out how to do correctly, create a function
# named after the engine returned in get_search_engine_xml(), to be called later
def create_get_engine_function(function_name, address):
def function_name():
r = requests.get(address)
return function_name
def get_search_engine_xml():
url = base_url + '/engine_list'
r = requests.get(url)
engines_list = str(r.content)
engines_root = ET.fromstring(engines_list)
for child in engines_root:
engine_name = child.text.lower()
engine_name = make_safe(engine_name)
engine_address = child.attrib['address']
create_get_engine_function(engine_name, engine_address)
## Runs without error.
get_search_engine_xml()
## But if I try to call one of the functions.
google()
私は次のエラーを取得します。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'google' is not defined
ログアウトするとengine_nameとengine_addressを定義しているようです。だから私は確かに問題がcreate_get_engine_functionにあると確信しています。それは、私が何をしているのか分からず、同様の質問からまとめようとしていました。
渡された引数を持つ別の関数によって作成された関数の名前を付けることはできますか?これを行うより良い方法はありますか?
最終目標は何ですか? –
基本的に、アプリはユーザーの入力を受け取り、物事を行います。入力は、これらの関数のいずれかを名前で呼び出し、他の静的関数といっしょに呼び出すなど、何をすべきかを把握するためのスイッチ関数に入ります。後でget_search_engine_xml()をもう一度呼び出す必要があり、xmlが変更された関数を削除したり、返されたxmlに基づいて新しい関数を追加したりする必要があります。 – Cynic