คำถามติดแท็ก python-3.x

สำหรับคำถามเกี่ยวกับการเขียนโปรแกรม Python ที่เฉพาะเจาะจงกับภาษารุ่น 3 ขึ้นไป ใช้แท็ก [หลาม] ทั่วไปมากขึ้นหากคำถามของคุณไม่เฉพาะรุ่น ใช้แท็ก [python-2.x] สำหรับคำถาม Python 2

2
ทำไม 'x' in ('x',) เร็วกว่า 'x' == 'x'
>>> timeit.timeit("'x' in ('x',)") 0.04869917374131205 >>> timeit.timeit("'x' == 'x'") 0.06144205736110564 ใช้ได้กับสิ่งอันดับด้วยหลายองค์ประกอบทั้งสองเวอร์ชันดูเหมือนจะเติบโตเป็นเส้นตรง: >>> timeit.timeit("'x' in ('x', 'y')") 0.04866674801541748 >>> timeit.timeit("'x' == 'x' or 'x' == 'y'") 0.06565782838087131 >>> timeit.timeit("'x' in ('y', 'x')") 0.08975995576448526 >>> timeit.timeit("'x' == 'y' or 'x' == 'y'") 0.12992391047427532 จากนี้ผมคิดว่าผมควรจะโดยสิ้นเชิงเริ่มใช้inทุกแทน==!

6
ทำไมไม่มีฟังก์ชั่น xrange ใน Python3
เมื่อเร็ว ๆ นี้ฉันเริ่มใช้ Python3 และมันก็ไม่มีความเจ็บปวด xrange ตัวอย่างง่ายๆ: 1) Python2: from time import time as t def count(): st = t() [x for x in xrange(10000000) if x%4 == 0] et = t() print et-st count() 2) Python3: from time import time as t def xrange(x): return iter(range(x)) def count(): st …
273 python  python-3.x  pep  xrange 

8
TypeError: method () ใช้เวลา 1 อาร์กิวเมนต์ตำแหน่ง แต่ได้รับ 2
ถ้าฉันมีคลาส ... class MyClass: def method(arg): print(arg) ... ที่ฉันใช้ในการสร้างวัตถุ ... my_object = MyClass() ... ที่ฉันเรียกmethod("foo")เช่นนั้น ... >>> my_object.method("foo") Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: method() takes exactly 1 positional argument (2 given) ... ทำไมหลามถึงบอกว่าฉันให้สองข้อโต้แย้งเมื่อฉันให้เพียงอันเดียว?

10
ฉันจะอ่านอินพุตเป็นตัวเลขได้อย่างไร
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ทำไมxและyสตริงแทนที่จะเป็น ints ในรหัสด้านล่าง? (หมายเหตุ: ในการใช้งาน 2.x หลามraw_input(). ในหลามใช้ 3.x input(). raw_input()ถูกเปลี่ยนชื่อinput()ในหลาม 3.x) play = True while play: x = input("Enter a number: ") y = input("Enter a number: ") print(x + y) print(x - y) print(x * y) print(x / y) print(x % y) if input("Play again? …

6
ทำไมฉันต้องใช้ 'b' เพื่อเข้ารหัสสตริงด้วย Base64
ต่อจากตัวอย่างไพธ อนฉันเข้ารหัสสตริงเป็น Base64 ด้วย: >>> import base64 >>> encoded = base64.b64encode(b'data to be encoded') >>> encoded b'ZGF0YSB0byBiZSBlbmNvZGVk' แต่ถ้าฉันออกจากผู้นำb: >>> encoded = base64.b64encode('data to be encoded') ฉันได้รับข้อผิดพลาดต่อไปนี้: Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python32\lib\base64.py", line 56, in b64encode raise TypeError("expected bytes, not %s" % s.__class__.__name__) …

3
วิธีการแปลง 'ไบนารีสตริง' เป็นสตริงปกติใน Python3
ตัวอย่างเช่นฉันมีสตริงเช่นนี้ (คืนค่าsubprocess.check_output): >>> b'a string' b'a string' ไม่ว่าฉันจะทำอะไรมันจะพิมพ์ด้วยความน่ารำคาญอยู่b'ตรงหน้าสตริงเสมอ: >>> print(b'a string') b'a string' >>> print(str(b'a string')) b'a string' ไม่มีใครมีแนวคิดใด ๆ เกี่ยวกับวิธีใช้เป็นสตริงปกติหรือแปลงเป็นสตริงปกติหรือไม่

11
ใช้ทั้ง Python 2.x และ Python 3.x ใน IPython Notebook
ฉันใช้สมุดบันทึก IPython และต้องการให้สามารถสร้างสมุดบันทึก python แบบ 2.x หรือ 3.x ใน IPython ได้ ตอนแรกฉันมีอนาคอนด้า ด้วย Anaconda ตัวแปรสภาพแวดล้อมทั่วโลกจะต้องมีการเปลี่ยนแปลงเพื่อเลือกเวอร์ชันของงูหลามที่คุณต้องการจากนั้น IPython สามารถเริ่มต้นได้ นี่ไม่ใช่สิ่งที่ฉันกำลังมองหาดังนั้นฉันถอนการติดตั้ง Anaconda และตอนนี้ได้ตั้งค่าการติดตั้งของตัวเองโดยใช้ MacPorts และ PiP ดูเหมือนว่าฉันยังต้องใช้ port select --set python <python version> เพื่อสลับระหว่าง python 2.x และ 3.x ซึ่งไม่ดีไปกว่าวิธีแก้ปัญหาของอนาคอนดา มีวิธีการเลือกไพ ธ อนรุ่นใดที่คุณต้องการใช้หลังจากที่คุณเริ่มต้นโน๊ตบุ๊ค IPython โดยเฉพาะอย่างยิ่งกับ MacPort รุ่นปัจจุบันของฉัน

5
คำใบ้ประเภทใดใน Python 3.5
หนึ่งในคุณสมบัติที่ได้รับการกล่าวถึงมากที่สุดใน Python 3.5 คือ ประเภทคำแนะนำ ตัวอย่างของคำแนะนำประเภทถูกกล่าวถึงในบทความนี้และคนนี้ในขณะที่ยังกล่าวถึงคำแนะนำการใช้งานประเภทอย่างมีความรับผิดชอบ ใครสามารถอธิบายเพิ่มเติมเกี่ยวกับพวกเขาและเมื่อพวกเขาควรจะใช้และเมื่อไม่ได้?

3
generator.next () ปรากฏใน Python 3 หรือไม่
ฉันมีเครื่องกำเนิดไฟฟ้าที่สร้างซีรีส์เช่น: def triangle_nums(): '''Generates a series of triangle numbers''' tn = 0 counter = 1 while True: tn += counter yield tn counter += + 1 ใน Python 2 ฉันสามารถโทรออกได้ดังต่อไปนี้: g = triangle_nums() # get the generator g.next() # get the next value อย่างไรก็ตามใน Python 3 หากฉันรันโค้ดสองบรรทัดเดียวกันฉันจะได้รับข้อผิดพลาดดังต่อไปนี้: AttributeError: 'generator' object …

2
ใช้ pickle.dump - TypeError: ต้องเป็น str ไม่ใช่ไบต์
ฉันใช้ python3.3 และฉันมีข้อผิดพลาดที่เป็นความลับเมื่อพยายามดองพจนานุกรมง่ายๆ นี่คือรหัส: import os import pickle from pickle import * os.chdir('c:/Python26/progfiles/') def storvars(vdict): f = open('varstor.txt','w') pickle.dump(vdict,f,) f.close() return mydict = {'name':'john','gender':'male','age':'45'} storvars(mydict) และฉันได้รับ: Traceback (most recent call last): File "C:/Python26/test18.py", line 31, in <module> storvars(mydict) File "C:/Python26/test18.py", line 14, in storvars pickle.dump(vdict,f,) TypeError: must be str, not …

6
จันดอกจันในฟังก์ชันอาร์กิวเมนต์?
เครื่องหมายดอกจันเปลือยในอาร์กิวเมนต์ของฟังก์ชันทำอะไร เมื่อฉันดูโมดูลดองฉันเห็นสิ่งนี้: pickle.dump(obj, file, protocol=None, *, fix_imports=True) ฉันรู้เกี่ยวกับเครื่องหมายดอกจันเดียวและสองครั้งก่อนหน้าอาร์กิวเมนต์ (สำหรับจำนวนตัวแปรของข้อโต้แย้ง) แต่สิ่งนี้นำหน้าอะไร และฉันค่อนข้างแน่ใจว่ามันไม่มีส่วนเกี่ยวข้องกับการดอง นั่นอาจเป็นเพียงตัวอย่างของเหตุการณ์นี้ ฉันเรียนรู้ชื่อเมื่อฉันส่งสิ่งนี้ให้กับล่ามเท่านั้น: >>> def func(*): ... pass ... File "<stdin>", line 1 SyntaxError: named arguments must follow bare * ถ้ามันเป็นเรื่องสำคัญฉันใช้ python 3.3.0

29
จำเป็นต้องใช้ Microsoft Visual C ++ 14.0 (ไม่พบ vcvarsall.bat)
ฉันได้ติดตั้ง Python 3.5 และในขณะที่ใช้งาน pip install mysql-python มันทำให้ฉันมีข้อผิดพลาดดังต่อไปนี้ error: Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat) ฉันได้เพิ่มบรรทัดต่อไปนี้ในเส้นทางของฉัน C:\Program Files\Python 3.5\Scripts\; C:\Program Files\Python 3.5\; C:\Windows\System32; C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC; C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC ฉันมีการติดตั้ง 64 บิต win 7 ในพีซีของฉัน pipสิ่งที่อาจจะแก้ปัญหาสำหรับการบรรเทาข้อผิดพลาดนี้และติดตั้งโมดูลได้อย่างถูกต้องผ่าน

9
วิธีที่ถูกต้องในการแปลงไบต์เป็นสตริงเลขฐานสิบหกใน Python 3 คืออะไร
วิธีที่ถูกต้องในการแปลงไบต์เป็นสตริงเลขฐานสิบหกใน Python 3 คืออะไร ฉันเห็นการอ้างสิทธิ์ของbytes.hexวิธีการbytes.decodeตัวแปลงสัญญาณและได้ลองฟังก์ชั่นอื่น ๆ ที่เป็นไปได้อย่างน่าประหลาดใจอย่างน้อยที่สุดโดยไม่มีประโยชน์ ฉันแค่อยากให้ไบต์เป็นเลขฐานสิบหก!
236 python  python-3.x  hex 

3
การเพิ่มค่าพารามิเตอร์เริ่มต้นด้วยคำใบ้ประเภทใน Python
ถ้าฉันมีฟังก์ชั่นเช่นนี้: def foo(name, opts={}): pass และฉันต้องการเพิ่มคำแนะนำประเภทให้กับพารามิเตอร์ฉันจะทำอย่างไร วิธีที่ฉันคิดว่าจะทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์: def foo(name: str, opts={}: dict) -> str: pass ต่อไปนี้ไม่ได้เกิดข้อผิดพลาดทางไวยากรณ์ แต่ดูเหมือนจะเป็นวิธีที่ใช้งานง่ายในการจัดการกรณีนี้: def foo(name: str, opts: dict={}) -> str: pass ฉันไม่พบสิ่งใดในtypingเอกสารหรือในการค้นหาของ Google แก้ไข: ฉันไม่ทราบว่าอาร์กิวเมนต์เริ่มต้นทำงานอย่างไรใน Python แต่เพื่อคำถามนี้ฉันจะเก็บตัวอย่างข้างต้น โดยทั่วไปการทำสิ่งต่อไปนี้ดีกว่ามาก: def foo(name: str, opts: dict=None) -> str: if not opts: opts={} pass


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.