Python の面接でテストする必要があるコードの質問
この記事の内容は、Python の面接でテストする必要があるコードの質問に関するものです。一定の参考価値があります。困っている友人は参照してください。お役に立てば幸いです。あなたに、助けられました。
おすすめ関連記事:「2020年Python面接質問まとめ(最新)」
# #質問 1: 次のコードの出力は何になりますか? 答えて説明してください。
class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x
答えは
1 1 1 1 2 1 3 2 3
質問 2: 次のコードの出力は何になりますか? 答えと説明を教えてください。
def p1(x,y): print("%s/%s = %s" % (x, y, x/y)) def p2(x,y): print("%s//%s = %s" % (x, y, x//y)) p1(5,2) p1(5.,2) p2(5,2) p2(5.,2.)
5/2 = 2 5.0/2.0=2.5 5/2=2 5/2=2
回答
この回答は、実際には、Python 2 を使用しているか Python 3 を使用しているかによって異なります。 Python 3 では、必要な出力は次のとおりです。5/2 = 2.5 5.0/2 = 2.5 5//2 = 2 5.0//2.0 = 2.0
5/2 = 2 5.0/2 = 2.5 5//2 = 2 5.0//2.0 = 2.0
また、「二重ダッシュ」(//) 演算子は、オペランドに関係なく、常に整数の除算を実行することにも注意してください。
質問 3:次のコードが出力されますか?
list = ['a', 'b', 'c', 'd', 'e'] print list[10:]
Answer上記のコードは [ ] を出力し、IndexError を引き起こしません。
def multipliers(): return [lambda x : i * x for i in range(4)] print [m(2) for m in multipliers()]
望ましい結果を生み出すために乗算器の定義をどのように変更しますか?
回答
上記のコードの出力は、([0, 2, 4, 6] ではなく) [6, 6, 6, 6] です。 この理由は、Python のクロージャの遅延バインディングが遅延バインディングを引き起こすためであり、これは、内部関数が呼び出されたときにクロージャ内の変数が検索されることを意味します。 () が呼び出されたとき、その中に i の値が入っている 呼び出されたときに周囲のスコープで検索される その時点で、どの戻り関数が呼び出されても for ループは完了しており、最終的な の値はi は 3 です。したがって、返される各関数乗算の値は 3 です。したがって、2 に等しい値が上記のコードに渡されると、値 6 (例: 3 x 2) が返されます。(顺便说下,正如在 The Hitchhiker’s Guide to Python 中指出的,这里有一点普遍的误解,是关于 lambda 表达式的一些东西。一个 lambda 表达式创建的函数不是特殊的,和使用一个普通的 def 创建的函数展示的表现是一样的。)
这里有两种方法解决这个问题。
最普遍的解决方案是创建一个闭包,通过使用默认参数立即绑定它的参数。例如:
def multipliers(): return [lambda x, i=i : i * x for i in range(4)]
另外一个选择是,你可以使用 functools.partial 函数:
from functools import partial from operator import mul def multipliers(): return [partial(mul, i) for i in range(4)]
问题五:以下的代码的输出将是什么? 说出你的答案并解释?
def extendList(val, list=[]): list.append(val) return list list1 = extendList(10) list2 = extendList(123,[]) list3 = extendList('a') print "list1 = %s" % list1 print "list2 = %s" % list2 print "list3 = %s" % list3
你将如何修改 extendList 的定义来产生期望的结果
以上代码的输出为:
list1 = [10, 'a'] list2 = [123] list3 = [10, 'a']
许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 [‘a’]。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 [ ]。
尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。
因此,list1 和 list3 是操作的相同的列表。而 "`list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list"参数的值)。
extendList 函数的定义可以做如下修改,但,当没有新的 list 参数被指定的时候,会总是开始一个新列表,这更加可能是一直期望的行为。
def extendList(val, list=None): if list is None: list = [] list.append(val) return list
使用这个改进的实现,输出将是:
list1 = [10] list2 = [123] list3 = ['a']
相关学习推荐:python视频教程
以上がPython の面接でテストする必要があるコードの質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

この記事では、Pythonにおける仮想環境の役割について説明し、プロジェクトの依存関係の管理と競合の回避に焦点を当てています。プロジェクト管理の改善と依存関係の問題を減らすための作成、アクティベーション、およびメリットを詳しく説明しています。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
