Keks
@Keks

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pythonで自作した関数に関して

Q&A

Closed

解決したいこと

Pythonの引数を取得し、取得したものと別の文字を組み合わせて配列を操作したい。

可能でしょうか?可能な場合どのようにすれば良いのかを教えて下さい。

現在

import webbrowser

pythonUrl_array=["Url1","Url2"]


def pythonBrowser():
    for n in range(len(pythonUrl_array)):
    
        webbrowser.open(pythonUrl_array[n])

これを

import webbrowser

pythonUrl_array=["Url1","Url2"]


def Browser(引数): #引数にはpythonが入る
    for n in range(len(引数Url_array)):

        webbrowser.open(引数Urlarray[n])

のようにしたいと考えています。

投稿者からのコメント

プログラミング自体を学習し始めてから間もないので的外れなことを言っていたら申し訳ないです。

0

2Answer

globals()を使えば可能です。上のコードを踏襲して書くと以下のようになります。

import webbrowser

pythonUrl_array = ["Url1", "Url2"]
googleUrl_array = ["Url1g", "Url2g"]

def Browser(args):
    arr = globals()[args + "Url_array"]
    for n in range(len(arr)):
       webbrowser.open(arr[n])
    
Browser("python")
Browser("google")

個人的には辞書dict()を使う方を提案したいと思います。globals()を使って取得するのはどうも力業でこなすイメージをもってしまいます。

urls = {
    "python": ["Url1", "Url2"],
    "google": ["Url1g", "Url2g"]
}

def browser(url_type):
    for url in urls[url_type]:
        print(url)
    
browser("python")
browser("google")
1Like

Comments

  1. @Keks

    Questioner

    返信ありがとうございます!

    大変参考になりました。

    特に提案して頂いた dict() を使ったプログラムのほうがより簡潔になりスッキリしました!
  2. 参考になったようでよかったです。
    本質問をクローズにしていただけたら終了となります。
    開発頑張ってください。

変数名ではなく、名前をキーにした辞書にしてはいかがですか?

urls = {
    'python': ["Url1","Url2"],
    'google': ["Url1g", "Url2g"],
}

def browse(name):
    for url in urls[name]:
        print(url)

browse('python')
browse('google')

定義済の変数を辞書にしてもいいですし。

python_url_array = ["Url1", "Url2"]
google_url_array = ["Url1g", "Url2g"]

urls = {
    'python': python_url_array,
    'google': google_url_array,
}

def browse(name):
    for url in urls[name]:
        print(url)

browse('python')
browse('google')
1Like

Comments

  1. @Keks

    Questioner

    返信ありがとうございます!

    大変参考になりました。

    定義済みの変数を辞書にするという考えはありませんでした。

Your answer might help someone💌