python
1with open("sequence.fasta.txt") as f: 2 3 max_len = 0 4 max_protein = "" 5 6 min_len = 0 7 min_protein = "" 8 9 def change(protein, seq): 10 global max_len,max_protein,min_len,min_protein 11 seq_len = len(seq) 12 if seq_len == 0: 13 return 14 15 else: 16 a = [seq_len] 17 print(a) 18 19 if seq_len > max_len: 20 max_len,max_protein,min_len,min_protein = seq_len,protein,seq_len,protein 21 22 else: 23 if seq_len < min_len: 24 min_len,min_protein = seq_len,protein 25
ファイルの中から最大値と最小値を検索し続け、見つかり次第、最小値、最大値、その時のタンパク質を更新していくのですが、change関数内のglobalをやめて、関数外で同じ機能を果たせるようにしたいです。
強いて言えば、globalを使用せずに他の関数で現在のコードのままの機能を果たすにはどのような関数を定義したら最適でしょうか?
また、globalは関数外から定義した数値を変更できる。との認識ですが、間違っていますでしょうか?
pythonは通常がlocalなのでできるだけglobalを使用したくないと考えています。
無理な要望ではあるかと思いますが、知っている方教えていただきたいです。
宜しくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/29 14:33
回答3件
0
return
で、戻り値で呼び出し側に返せば良いでしょう。
#追記
return
命令の使い方:
Python
1def foo(): 2 x = 123 3 return x 4 5kekka = foo() 6print(kekka)
投稿2018/12/29 14:46
編集2019/01/06 11:05総合スコア84533
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/02 00:46
2019/01/02 01:12
2019/01/02 01:27
2019/01/02 02:12
2019/01/03 12:15
2019/01/06 00:20 編集
2019/01/06 00:22
2019/01/06 03:09
2019/01/06 10:21
2019/01/06 10:31
2019/01/06 10:55
2019/01/06 11:05
2019/01/06 12:11
2019/01/06 12:16
2019/01/06 12:24
2019/01/06 12:36
2019/01/06 12:56
2019/01/06 15:41
2019/01/14 12:10
0
ベストアンサー
現在のコードのまま
という制約が厳しすぎて回答難しいのですが…
関数の引数としてリストや辞書を渡して、その要素値を変更する手法はどうででしょうか?
Python
1def change(protein, seq, ret): 2 # 略 3 if seq_len > max_len: 4 ret['max_len'],ret['max_protein'],~ = seq_len, protein, ~ 5 6ret = {} 7change(~, ret)
投稿2018/12/29 14:53
編集2019/01/06 01:59総合スコア38262
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/06 00:23
2019/01/06 02:56
2019/01/06 03:03
2019/01/06 03:46
2019/01/06 03:48
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。