පයිතන්ගේ සැඟවුණු ලක්ෂණ [වසා ඇත]


1418

පයිතන් ක්‍රමලේඛන භාෂාවේ එතරම් ප්‍රසිද්ධ නැති නමුත් ප්‍රයෝජනවත් අංග මොනවාද?

  • පයිතන් හරයට පිළිතුරු සීමා කිරීමට උත්සාහ කරන්න.
  • පිළිතුරකට එක් අංගයක්.
  • ප්‍රලේඛනයට සබැඳියක් පමණක් නොව, විශේෂාංගය පිළිබඳ උදාහරණයක් සහ කෙටි විස්තරයක් දෙන්න.
  • පළමු පේළිය ලෙස මාතෘකාවක් භාවිතා කරමින් විශේෂාංගය ලේබල් කරන්න.

පිළිතුරු සඳහා ඉක්මන් සබැඳි:

Answers:


740

දම්වැල් සංසන්දනාත්මක ක්‍රියාකරුවන්:

>>> x = 5
>>> 1 < x < 10
True
>>> 10 < x < 20 
False
>>> x < 10 < x*10 < 100
True
>>> 10 > x <= 9
True
>>> 5 == x > 4
True

ඔබ සිතන්නේ එය සිදු වන බවයි 1 < x, එය එලියට එයි True, පසුව සංසන්දනය කරයි True < 10, එය ද Trueඑසේ නොවේ, එසේ නොවේ, එය ඇත්ත වශයෙන්ම සිදු නොවේ (අවසාන උදාහරණය බලන්න.) එය සැබවින්ම පරිවර්ථනය 1 < x and x < 10වන අතර x < 10 and 10 < x * 10 and x*10 < 100, නමුත් අඩු ටයිප් කිරීම සහ එක් එක් පදය තක්සේරු කරනු ලබන්නේ එක් වරක් පමණි.


121
එය ඉතා ප්‍රයෝජනවත්. එය සියලු භාෂා සඳහා සම්මත විය යුතුය. කනගාටුවට කරුණ නම් එය එසේ නොවේ.
stalepretzel

8
ව්‍යාජ අස්වැන්නක් ලබා දෙන උදාහරණ කිහිපයක් ඔබ එකතු කළ යුතුය. >>> 10 <x <20 අසත්‍යය
සපත්තු

19
මෙය වෙනත් සංසන්දනාත්මක ක්‍රියාකරුවන්ට ද අදාළ වේ, ඒ නිසා සමහර විට මිනිසුන් පුදුමයට පත් වන්නේ (5 න් [5] සත්‍යය) වැනි කේතය අසත්‍ය වන්නේ මන්ද යන්නයි (නමුත් ආරම්භ කිරීම සඳහා බූලියන්ට එරෙහිව පැහැදිලිව පරීක්‍ෂා කිරීම නුසුදුසු ය).
මයිල්ස්

19
හොඳයි, නමුත් 'in' සහ '=' වැනි සමාන ආධිපත්‍යයක් ගැන විමසිල්ලෙන් සිටින්න. 'A හි B == C හි D' යන්නෙන් අදහස් කරන්නේ '(A හි B) සහ (B == C) සහ (C හි D)' එය අනපේක්ෂිත විය හැකිය.
චාල්ස් මෙරියම්

15
අසාෆ්: ලිස්ප්ගේ සැසඳීම් ස්වභාවයෙන්ම මේ ආකාරයෙන් ක්‍රියාත්මක වේ. අර්ථ නිරූපණය කිරීමට වෙනත් (සාධාරණ) ක්‍රමයක් නොමැති නිසා එය විශේෂ අවස්ථාවක් නොවේ (< 1 x 10). ඔබට ඒවා තනි තර්ක සඳහා පවා යෙදිය හැකිය (= 10): cs.cmu.edu/Groups/AI/html/hyperspec/HyperSpec/Body/…
කෙන්

512

ඔබේ රීජෙක්ස් නිදොස් කිරීම සඳහා පයිතන් රීජෙක්ස් විග්‍රහ කිරීමේ ගස ලබා ගන්න.

නිත්‍ය ප්‍රකාශන පයිතන්හි විශිෂ්ට ලක්ෂණයකි, නමුත් ඒවා නිදොස් කිරීම වේදනාවක් විය හැකි අතර, රීජෙක්ස් වැරදියට ලබා ගැනීම පහසුය.

වාසනාවකට මෙන්, ලේඛනගත නොකළ, පර්යේෂණාත්මක, සැඟවුණු ධජය re.DEBUG(ඇත්ත වශයෙන්ම, 128) වෙත යැවීමෙන් පයිතන්ට රීජෙක්ස් විග්‍රහ ගස මුද්‍රණය කළ හැකිය re.compile.

>>> re.compile("^\[font(?:=(?P<size>[-+][0-9]{1,2}))?\](.*?)[/font]",
    re.DEBUG)
at at_beginning
literal 91
literal 102
literal 111
literal 110
literal 116
max_repeat 0 1
  subpattern None
    literal 61
    subpattern 1
      in
        literal 45
        literal 43
      max_repeat 1 2
        in
          range (48, 57)
literal 93
subpattern 2
  min_repeat 0 65535
    any None
in
  literal 47
  literal 102
  literal 111
  literal 110
  literal 116

ඔබ වාක්‍ය ඛණ්ඩය තේරුම් ගත් පසු, ඔබේ දෝෂ හඳුනාගත හැකිය. එහිදී අපට දැක ගත හැකිය මට ඇතුළතින් පැන යාමට අමතක වූ []බව [/font].

ඇත්ත වශයෙන්ම ඔබට අදහස් දැක්වූ රීජෙක්ස් වැනි ඔබට අවශ්‍ය ඕනෑම කොඩි සමඟ එය ඒකාබද්ධ කළ හැකිය:

>>> re.compile("""
 ^              # start of a line
 \[font         # the font tag
 (?:=(?P<size>  # optional [font=+size]
 [-+][0-9]{1,2} # size specification
 ))?
 \]             # end of tag
 (.*?)          # text between the tags
 \[/font\]      # end of the tag
 """, re.DEBUG|re.VERBOSE|re.DOTALL)

3
සාමාන්‍ය ප්‍රකාශනය භාවිතා කරමින් HTML විග්‍රහ කිරීම හැර සෙමින් හා වේදනාකාරී වේ. සාදන ලද 'html' විග්‍රහ මොඩියුලය පවා වැඩ නිම කිරීම සඳහා රීජෙක්ස් භාවිතා නොකරයි. HTML මොඩියුලය ඔබව සතුටු නොකරන්නේ නම්, රෝදය ප්‍රතිනිර්මාණය නොකර කාර්යය කරන XML / HTML විග්‍රහ මොඩියුල ඕනෑ තරම් තිබේ.
BatchyX

ප්‍රතිදාන සින්ටැක්ස් හි ප්‍රලේඛනය සඳහා සබැඳියක් විශිෂ්ට වනු ඇත.
පුද්ගලයා

1
මෙය පයිතන්ගේ නිල කොටසක් විය යුතුය, පර්යේෂණාත්මක නොවේ ... රෙජෙක්ස් සැමවිටම උපක්‍රමශීලී වන අතර සිදුවන්නේ කුමක්ද යන්න සොයා ගැනීමට හැකිවීම ඇත්තෙන්ම ප්‍රයෝජනවත් වේ.
කාහිත්

460

ගණනය කරන්න

නැවත ගණනය කළ හැකි සංඛ්‍යාවක් ගණනය කරන්න, එය අයිතමය එහි දර්ශකය සමඟ ලබා දෙනු ඇත.

උදාහරණයක් වශයෙන්:


>>> a = ['a', 'b', 'c', 'd', 'e']
>>> for index, item in enumerate(a): print index, item
...
0 a
1 b
2 c
3 d
4 e
>>>

යොමුව:


56
පයිතන් ලැයිස්තු ගැන කතා කරන නිබන්ධන වල මෙය සාමාන්‍යයෙන් ආවරණය නොවීම ගැන මට පුදුමයි.
ඩ්‍රේමන්

45
මේ කාලය පුරාම මම මේ ආකාරයෙන් කේතනය කරමින් සිටියෙමි: මම පරාසයේ (ලෙන් (අ)): ... ඉන්පසු වත්මන් අයිතමය ලබා ගැනීම සඳහා [i] භාවිතා කරමි.
ප්‍රනාන්දු මාටින්

4
Er බෙරී සකාලා: මගේ දැනුමට අනුව එය ප්‍රතික්ෂේප කර නැත.
ජාබ්

23
ශුද්ධ කපටිය මෙය නියමයි. මම xrange (len (a)) සඳහා: සෑම විටම මගේ අවම කැමතිම පයිතන් මෝඩය වී ඇත.
පුද්ගලයා

15
'කීයක් දී අයිතමය (i සඳහා: කීයක් නොවන අත්තනෝමතික දර්ශකය, අවශ්ය 0 නිදර්ශන සිට ආරම්භ කළ හැකි ලැයිස්තුව නොවේ 0, 1 සිට ගණනය කිරීම ආරම්භ වනු ඇත: i, අයිතමය මුද්රණය කිරීම, ආරම්භ = 1)'
dmitry_romanov

419

උත්පාදක වස්තු නිර්මාණය කිරීම

ඔබ ලියන්නේ නම්

x=(n for n in foo if bar(n))

ඔබට උත්පාදක යන්ත්රයෙන් පිටතට ගොස් එය x වෙත පැවරිය හැකිය. දැන් එයින් අදහස් කරන්නේ ඔබට කළ හැකි බවයි

for n in x:

මෙහි ඇති වාසිය නම් ඔබට අතරමැදි ආචයනයක් අවශ්‍ය නොවන අතර එය ඔබට අවශ්‍ය නම් ඔබට අවශ්‍ය වනු ඇත

x = [n for n in foo if bar(n)]

සමහර අවස්ථාවල මෙය සැලකිය යුතු වේගයකට හේතු විය හැක.

උත්පාදක යන්ත්රයේ අවසානය දක්වා ප්රකාශයන් නම්, බොහෝමයක් එකතු කළ හැකිය, මූලික වශයෙන් ලූප සඳහා කැදැල්ල අනුකරණය කරයි:

>>> n = ((a,b) for a in range(0,2) for b in range(4,6))
>>> for i in n:
...   print i 

(0, 4)
(0, 5)
(1, 4)
(1, 5)

ඒ සඳහා ඔබට කැදැලි ලැයිස්තු අවබෝධයක් ද භාවිතා කළ හැකිය, ඔව්?
shapr

54
විශේෂයෙන් මතක තබා ගත යුත්තේ මතක පොදු කාර්ය ඉතිරියයි. සාරධර්ම ඉල්ලුමට අනුව ගණනය කරනු ලැබේ, එබැවින් ලැයිස්තු අවබෝධයේ සම්පූර්ණ ප්‍රති result ලය ඔබට කිසි විටෙකත් මතකයේ නොමැත. ඔබ පසුව ලැයිස්තු අවබෝධයේ කොටසක් පමණක් නැවත කියන්නේ නම් මෙය විශේෂයෙන් යෝග්‍ය වේ.
saffsd

19
මෙය විශේෂයෙන් "සැඟවුණු" ඉමෝ නොවේ, නමුත් ඔබට උත්පාදක වස්තුවක් පෙරළා දැමීමට නොහැකි වීම සැලකිල්ලට ගැනීම වටී, නමුත් ඔබට ලැයිස්තුවක් හරහා නැවත නැවත ප්‍රකාශ කළ හැකිය.
susmits

13
උත්පාදක යන්ත‍්‍රවල “රිවයින්ඩ් නැත” විශේෂාංගය යම් ව්‍යාකූලත්වයක් ඇති කළ හැකිය. නිශ්චිතවම, ඔබ නිදොස්කරණය සඳහා උත්පාදක යන්ත්‍රයක අන්තර්ගතය මුද්‍රණය කරන්නේ නම්, පසුව දත්ත සැකසීමට එය භාවිතා කරන්න, එය ක්‍රියා නොකරයි. දත්ත නිපදවනු ලැබේ, මුද්‍රණය () මගින් පරිභෝජනය කරයි, පසුව සාමාන්‍ය සැකසුම් සඳහා ලබා ගත නොහැක. ලැයිස්තු අවබෝධය සඳහා මෙය අදාළ නොවේ, මන්ද ඒවා සම්පූර්ණයෙන්ම මතකයේ ගබඩා වී ඇති බැවිනි.
johntellsall

4
සමාන (dup?) පිළිතුර: stackoverflow.com/questions/101268/hidden-features-of-python/… කෙසේ වෙතත්, මා මෙහි සම්බන්ධ කළ පිළිතුරෙහි උත්පාදක යන්ත්‍රවල බලය පිළිබඳ සැබවින්ම හොඳ ඉදිරිපත් කිරීමක් සඳහන් වන බව සලකන්න. ඔබ එය සැබවින්ම පරීක්ෂා කර බැලිය යුතුය.
ඩෙනිල්සන් එස් මායා

353

iter () ට කැඳවිය හැකි තර්කයක් ගත හැකිය

උදාහරණයක් වශයෙන්:

def seek_next_line(f):
    for c in iter(lambda: f.read(1),'\n'):
        pass

මෙම iter(callable, until_value)කාර්යය නැවත නැවතත් ඉල්ලා සිටී callableතෙක් එහි ප්රතිඵල හා ඵලදාවක් ලබා until_valueආපසු එවනු ලැබේ.


පයිතන් සඳහා නවකයෙකු ලෙස, lambdaමෙහි මූලික පදය අවශ්‍ය වන්නේ මන්දැයි ඔබට පැහැදිලි කළ හැකිද?
SiegeX

Imb ලැම්බඩා නොමැතිව SiegeX, iter ශ්‍රිතයට යැවීමට පෙර f.read (1) ඇගයීමට ලක් කෙරේ (නූලක් ආපසු). ඒ වෙනුවට, ලැම්බඩා නිර්නාමික ශ්‍රිතයක් නිර්මාණය කර එය iter වෙත යොමු කරයි.
jmilloy

339

විකෘති පෙරනිමි තර්ක සමඟ ප්‍රවේශම් වන්න

>>> def foo(x=[]):
...     x.append(1)
...     print x
... 
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]

ඒ වෙනුවට, ඔබ "ලබා දී නැත" යනුවෙන් දැක්වෙන සෙන්ඩිනල් අගයක් භාවිතා කළ යුතු අතර පෙරනිමියෙන් ඔබ කැමති විකෘති සමඟ ආදේශ කරන්න:

>>> def foo(x=None):
...     if x is None:
...         x = []
...     x.append(1)
...     print x
>>> foo()
[1]
>>> foo()
[1]

39
එය අනිවාර්යයෙන්ම වඩා අප්රසන්න සැඟවුණු අංගයකි. මම වරින් වර ඒ තුළට දිව ගියෙමි.
ටොරස්ටන් මාරෙක්

77
පෙරනිමි තර්ක ජීවයේ ක්‍රියාකාරීත්වයේ ලක්ෂණයක් වන ටුපල් එකක ජීවත් වන බව දැනගත් විට මෙය තේරුම් ගැනීමට මට පහසු විය foo.func_defaults. එය, ටුපල් එකක් වීම, වෙනස් කළ නොහැකි ය.
රොබට් රොස්නි

2
@grayger: def ප්‍රකාශය ක්‍රියාත්මක වන විට එහි තර්ක පරිවර්තකයා විසින් ඇගයීමට ලක් කරනු ලැබේ. මෙය කේත වස්තුවකට (ශ්‍රිතයේ කට්ටලය) නමක් නිර්මාණය කරයි (හෝ නැවත සකස් කරයි). කෙසේ වෙතත්, පෙරනිමි තර්ක නිර්වචනය කරන අවස්ථාවේ දී වස්තු ලෙස ක්ෂණිකව දැක්වේ. පෙරනිමි වස්තුවක ඕනෑම වේලාවක මෙය සත්‍ය වේ, නමුත් වස්තුව විකෘති වන විට සැලකිය යුතු (දෘශ්‍ය අර්ථ නිරූපණයන් නිරාවරණය කිරීම) පමණි. ශ්‍රිතය වැසීමේදී එම පෙරනිමි තර්ක නාමය නැවත බන්ධනය කිරීමේ ක්‍රමයක් නොමැත, නමුත් එය පැහැදිලිවම ඕනෑම ඇමතුමක් සඳහා අධික ලෙස ධාවනය කළ හැකි හෝ සම්පූර්ණ ශ්‍රිතය නැවත අර්ථ දැක්විය හැක).
ජිම් ඩෙනිස්

3
Ob රොබට් ඇත්ත වශයෙන්ම තර්ක විතර්ක වෙනස් කළ නොහැකි නමුත් එය පෙන්වා දෙන වස්තූන් අනිවාර්යයෙන්ම වෙනස් කළ නොහැක.
පූලි

16
ඔබේ ආරම්භය මඳක් කෙටි කිරීමට එක් ඉක්මන් හැක්: x = x හෝ []. ප්‍රකාශය නම් 2 පේළිය වෙනුවට ඔබට එය භාවිතා කළ හැකිය.
dave mankoff

317

උත්පාදක කාර්යයන් සඳහා අගයන් යැවීම . උදාහරණයක් ලෙස මෙම ශ්‍රිතය තිබීම:

def mygen():
    """Yield 5 until something else is passed back via send()"""
    a = 5
    while True:
        f = (yield a) #yield a and possibly get f in return
        if f is not None: 
            a = f  #store the new value

ඔයාට පුළුවන්:

>>> g = mygen()
>>> g.next()
5
>>> g.next()
5
>>> g.send(7)  #we send this back to the generator
7
>>> g.next() #now it will yield 7 until we send something else
7

එකඟ විය. මෙය පයිතන්ගේ සැඟවුණු අංගයක නපුරු උදාහරණයක් ලෙස අපි සලකමු :)
Rafał Dowgird

89
වෙනත් භාෂාවලින්, මෙම ඉන්ද්‍රජාලික උපාංගය "විචල්ය" ලෙස හැඳින්වේ.
finnw

5
coroutines coroutines විය යුතු අතර මිශ්‍රණයකින් තොරව උත්පාදක යන්ත්රය විය යුතුය. මෙගා- ශ්‍රේෂ්
u0b34a0f6ae

31
infinnw: උදාහරණය විචල්‍යයකට සමාන දෙයක් ක්‍රියාත්මක කරයි. කෙසේ වෙතත්, විශේෂාංගය වෙනත් බොහෝ ආකාරවලින් භාවිතා කළ හැකිය ... විචල්යයක් මෙන් නොව. වස්තූන් භාවිතයෙන් සමාන අර්ථකථන ක්‍රියාත්මක කළ හැකි බව ද පැහැදිලිය (පයිතන්ගේ ඇමතුම් ක්‍රමය ක්‍රියාත්මක කරන පන්තියක් , විශේෂයෙන්).
ජිම් ඩෙනිස්

4
සම-චර්යාවන් කවදාවත් දැක නැති (බොහෝ විට නොතේරෙන) අයට මෙය ඉතා සුළු උදාහරණයකි. එකතුව විචල්‍ය පිටාර ගැලීමේ අවදානමකින් තොරව ධාවන සාමාන්‍යය ක්‍රියාත්මක කරන උදාහරණය හොඳ එකකි.
ප්‍රශාන්ත් කුමාර්

312

විෂය පථයන් දැක්වීමට සුදු අවකාශය භාවිතා කිරීමට ඔබ අකමැති නම්, ඔබට නිකුත් කිරීමෙන් සී-ස්ටයිල් {use භාවිතා කළ හැකිය:

from __future__ import braces

122
එය නපුරකි. :)
ජේසන් බේකර්

37
>>> __ අනාගත__ ආනයන වරහන් ගොනුව "<stdin>", 1 වන පේළිය සින්ටැක්ස් දෝෂය: අවස්ථාවක් නොවේ: පී
බෙන්ජමින් ඩබ්ලිව්. ස්මිත්

40
එය අපහාසයකි!
බර්ක් ඩී. ඩෙමීර්

335
මම හිතන්නේ අපට මෙහි සින්ටැක්ටිකල් වැරැද්දක් සිදුවිය හැකිය, එය " __past__ ආනයන වරහන් වලින්" විය යුතු නොවේද?
බිල් කේ

47
සිට __cruft__ ආනයන සඟල
පිලිප් බී Oldham

305

පෙති ක්‍රියාකරුවන්ගේ පියවර තර්කය. උදාහරණයක් වශයෙන්:

a = [1,2,3,4,5]
>>> a[::2]  # iterate over the whole list in 2-increments
[1,3,5]

විශේෂ අවස්ථාව x[::-1]'x ආපසු හැරවීම' සඳහා ප්‍රයෝජනවත් මෝඩය.

>>> a[::-1]
[5,4,3,2,1]

31
මගේ මතය අනුව, වඩා පැහැදිලි වන්නේ ආපසු හැරවූ () ශ්‍රිතයයි. >>> ලැයිස්තුව (ආපසු හැරවීම (පරාසය (4))) [3, 2, 1, 0]
ක්‍රිස්ටියන් ඕඩාර්ඩ්

3
වඩා හොඳ ආකාරයකින් "මෙම ia string" [:: - 1] ලියන්නේ කෙසේද? ආපසු හැරවීම උදව් කරන බවක් නොපෙනේ
බෙරී සකලා

24
ආපසු හැරවූ () හි ඇති ගැටළුව නම්, එය නැවත ක්‍රියාකරවන්නෙකු ආපසු ලබා දීමයි, එබැවින් ඔබට ආපසු හරවන ලද අනුක්‍රමය (ටුපල්, ස්ට්‍රිං, ලිස්ට්, යුනිකෝඩ්, පරිශීලක වර්ග ...) ආරක්ෂා කර ගැනීමට අවශ්‍ය නම්, එය නැවත පරිවර්තනය කිරීමට ඔබට අතිරේක පියවරක් අවශ්‍ය වේ. .
Rafał Dowgird

6
def vers_string (string): ආපසු නූල [:: - 1]
pi.

4
@pi මම සිතන්නේ ඔබට ඇති ආකාරයට ප්‍රතිවිකුණුම් නිර්වචනය කිරීමට යමෙකු දන්නේ නම් යමෙකුට ඔබේ කේතයේ [:: - 1] අතහැර දමා එහි අර්ථය සහ එය සුදුසු යැයි හැඟීම සමඟ සැපපහසු විය හැකිය.
භෞතික විද්‍යාව

289

සැරසිලි කරන්නන්

ක්‍රියාකාරිත්වය එකතු කිරීම, තර්ක හෝ ප්‍රති results ල වෙනස් කිරීම වැනි වෙනත් ශ්‍රිතයක් තුළ සැරසිලි කරුවන්ට සැරසිලි කිරීමට ඉඩ සලසයි. ඔබ සැරසිලි කරුවන් ශ්‍රිත අර්ථ දැක්වීමට ඉහළින් එක් පේළියක් ලියයි, එය “at” ලකුණකින් (@) ආරම්භ වේ.

උදාහරණ ලෙස print_argsසැරසිලි කරුවෙකු එය කැඳවීමට පෙර අලංකාර කරන ලද ශ්‍රිතයේ තර්ක මුද්‍රණය කරයි:

>>> def print_args(function):
>>>     def wrapper(*args, **kwargs):
>>>         print 'Arguments:', args, kwargs
>>>         return function(*args, **kwargs)
>>>     return wrapper

>>> @print_args
>>> def write(text):
>>>     print text

>>> write('foo')
Arguments: ('foo',) {}
foo

54
සැරසිලි කරුවන් නිර්වචනය කරන විට, සැරසිලි කරුවා @decorator සමඟ අලංකාර කිරීම නිර්දේශ කරමි. එය සැරසිලි කරුවෙකු නිර්මාණය කරයි. වැඩි විස්තර මෙතැනින්: phyast.pitt.edu/~micheles/python/documentation.html
සර්වාර්ට්

45
මෙය සැඟවුණු අංගයක් වන්නේ කෙසේද?
Vetle

50
හොඳයි, එය ඉතා සරල පයිතන් නිබන්ධනවල නොපවතින අතර, මම පයිතන් භාවිතා කිරීමට පටන් ගෙන බොහෝ කලකට පසු මම එයට බාධා කළෙමි. එයයි මම සැඟවුණු අංගයක් ලෙස හඳුන්වන්නේ, මෙහි ඇති අනෙකුත් ඉහළ තනතුරු වලට සමානය.
DzinX

16
vetler, ප්‍රශ්න අසන්නේ “පයිතන් ක්‍රමලේඛන භාෂාවේ එතරම් ප්‍රසිද්ධ නැති නමුත් ප්‍රයෝජනවත් අංග” යන්නයි. 'එතරම් නොදන්නා නමුත් ප්‍රයෝජනවත් අංග' ඔබ මනින්නේ කෙසේද? මම අදහස් කළේ මෙම ප්‍රතිචාර වලින් කිසිවක් සැඟවුණු අංගයන් වන්නේ කෙසේද?
ජොන්ඩ්

4
@vetler මෙහි බොහෝ දේ "සැඟවී" නැත.
හම්ෆ්රි බොගාර්ට්

288

සඳහා ... වෙනත් වාක්‍ය ඛණ්ඩය ( http://docs.python.org/ref/for.html බලන්න )

for i in foo:
    if i == 0:
        break
else:
    print("i was never 0")

විවේකය ලෙස හැඳින්වුවහොත් මිස, "වෙනත්" කොටස සාමාන්‍යයෙන් for for loop අවසානයේ ක්‍රියාත්මක වේ.

ඉහත කේතය පහත පරිදි අනුකරණය කළ හැකිය:

found = False
for i in foo:
    if i == 0:
        found = True
        break
if not found: 
    print("i was never 0")

218
මම හිතන්නේ for / else වාක්‍ය ඛණ්ඩය අමුතුයි. ලූපයේ සිරුර කිසි විටෙකත් ක්‍රියාත්මක නොවන්නේ නම් අනෙක් වගන්තිය ක්‍රියාත්මක කළ යුතු යැයි එය “දැනේ”.
කේත කේතය

14
අහ්. කවදාවත් එය දැක නැත! නමුත් මම කිව යුතුයි එය ටිකක් වැරදි අර්ථකථනයක්. විවේකය කිසි විටෙකත් සිදු නොවන්නේ නම් පමණක් අනෙක් වාරණය ක්‍රියාත්මක වනු ඇතැයි අපේක්ෂා කරන්නේ කවුද? මම කේත පත්‍රය සමඟ එකඟ වෙමි: හිස් මෝඩයන් සඳහා වෙනත් ඇතුළත් කර ඇති බව පෙනේ.
ඩැරන් තෝමස්

52
මූල පදය අවසාන වශයෙන් විය යුතු බව පෙනේ, වෙනත් නොවේ
ජියාරෝ

21
අවසාන වශයෙන් දැනටමත් එම කට්ටලය සෑම විටම ක්‍රියාත්මක වන ආකාරයෙන් භාවිතා කිරීම හැර.

7
නිශ්චිතවම 'වෙනත්' නොවිය යුතුය. සමහර විට 'එහෙනම්' හෝ වෙනත් දෙයක්, පසුව ලූපය කිසි විටෙකත් ක්‍රියාත්මක නොවූ විට 'වෙනත්' විය හැකිය.
ටෝර් වලමෝ

258

2.5 සිට ඩික්ට්ස් හි __missing__අතුරුදහන් වූ අයිතම සඳහා විශේෂ ක්‍රමයක් ඇත :

>>> class MyDict(dict):
...  def __missing__(self, key):
...   self[key] = rv = []
...   return rv
... 
>>> m = MyDict()
>>> m["foo"].append(1)
>>> m["foo"].append(2)
>>> dict(m)
{'foo': [1, 2]}

දී dict උපපංතිය ද ඇත collectionsකැඳවා defaultdictඑච්චරමයි එම කරන්නේ නමුත් දැනට පවතින නොවන භාණ්ඩ සඳහා තර්ක තොරව කාර්යයෙන් බව:

>>> from collections import defaultdict
>>> m = defaultdict(list)
>>> m["foo"].append(1)
>>> m["foo"].append(2)
>>> dict(m)
{'foo': [1, 2]}

එවැනි උප පංති බලාපොරොත්තු නොවන කාර්යයන් වෙත යොමු කිරීමට පෙර එවැනි නියෝග සාමාන්‍ය නියෝග වලට පරිවර්තනය කිරීමට මම නිර්දේශ කරමි. කේතයට d[a_key]නව අයිතමයක් එකතු කරන අයිතමයක් තිබේදැයි පරීක්ෂා කිරීමට බොහෝ කේත භාවිතා කරයි .


10
මම කැමතියි setdefault භාවිතා කිරීමට. m = {}; m.setdefault ('foo', 1)
අළු පාට

22
@ ග්‍රේගර් මෙයින් අදහස් කළේය m={}; m.setdefault('foo', []).append(1).
ක්‍රිස්ටියන් කියුපිටු

1
කෙසේ වෙතත්, පැහැර හැරීමේ නියෝගය සම්මත කිරීම ඉතා පහසු අවස්ථාවන් තිබේ. ශ්‍රිතය නිදසුනක් ලෙස අගය ඉක්මවා යා හැකි අතර පෙරනිමිය හිස් ලැයිස්තුවක් බැවින් එය අතිරේක කේතයකින් තොරව නිර්වචනය නොකළ යතුරු සඳහා ක්‍රියා කරයි.
මේරියන්

3
පෙරනිමි වස්තුව setdefault වලට වඩා හොඳය, මන්ද යතුර අස්ථානගත නොවන්නේ නම් එය පෙරනිමි වස්තුව නිර්මාණය නොකරයි . setdefault එය නැතිවූවත් නැතත් එය නිර්මාණය කරයි. ඔබගේ පෙරනිමි වස්තුව නිර්මාණය කිරීම සඳහා මිල අධික නම් මෙය කාර්ය සාධනයට ලක්විය හැකිය - සියලු සෙට් ඩෙෆෝල්ට් ඇමතුම් වෙනස් කිරීමෙන් එක් වැඩසටහනකින් මට හොඳ වේගයක් ලැබුණි.
Whatang

2
defaultdictsetdefaultවෙනත් අවස්ථාවල ක්‍රමයට වඩා බලවත් වේ . උදාහරණයක් ලෙස, කවුන්ටරයකට dd = collections.defaultdict(int) ... dd[k] += 1එදිරිව d.setdefault(k, 0) += 1.
මයික් ග්‍රැහැම්

247

ස්ථානීය අගය හුවමාරුව

>>> a = 10
>>> b = 5
>>> a, b
(10, 5)

>>> a, b = b, a
>>> a, b
(5, 10)

පැවරුමේ දකුණු පස නව ටුපල් එකක් නිර්මාණය කරන ප්‍රකාශනයකි. පැවරුමේ වම් පස වහාම (යොමු නොකල) නම් වලට ඇලවීම aසහ b.

පැවරුම පසු, නව tuple සහිතවූ හා කැළි කසළ සඳහා සලකුණු වන අතර, එම අගයන් බැඳී aහා bජින් කර ඇත.

දත්ත ව්‍යුහයන් පිළිබඳ පයිතන් නිබන්ධනයේ සඳහන් පරිදි ,

බහුවිධ පැවරුම් සැබවින්ම ටුපල් ඇසුරුම් සහ අනුක්‍රමික ඇසුරුම්වල එකතුවක් බව සලකන්න.


1
මෙය සාම්ප්‍රදායික ක්‍රමයට වඩා සැබෑ මතකය භාවිතා කරයිද? මම හිතන්නේ ඔබ එක් හුවමාරු විචල්‍යයක් වෙනුවට ටුපල් එකක් නිර්මාණය කරන බැවින්
නේතන්

75
එය වැඩි මතකයක් භාවිතා නොකරයි. එය අඩුවෙන් භාවිතා කරයි .. මම එය දෙයාකාරයෙන්ම ලියා, බයිට් කේතය සම්පාදනය කළෙමි .. සම්පාදකයා ප්‍රශස්ත කරයි, ඔබ බලාපොරොත්තු වන පරිදි. ප්‍රති results ල වලින් පෙනී ගියේ එය vars සැකසෙන බවත් පසුව ROT_TWOing කරන බවත්ය. ROT_TWO යන්නෙහි තේරුම 'ඉහළම ස්ථර දෙක මාරු කරන්න' යන්නයි.
රාජකීය

5
ඔබ නොදැනුවත්වම පයිතන්ගේ තවත් හොඳ ලක්ෂණයක් පෙන්වා දෙයි, එනම් ඔබට කොමා මඟින් වෙන් කිරීමෙන් අයිතමයන් විශාල ප්‍රමාණයක් සෑදිය හැකිය.
asmeurer

3
ඩනා ද සැන්: පයිතන් හි පැවරුම ප්‍රකාශයක් නොව ප්‍රකාශයකි, එබැවින් = වැඩි ප්‍රමුඛතාවයක් තිබේ නම් එම ප්‍රකාශය අවලංගු වේ (එනම් එය අර්ථ නිරූපණය කළේ a, (b = b), a).
hbn

5
මම මෙහි කියවා ඇති අවම සැඟවුණු ලක්ෂණය මෙයයි. හොඳයි, නමුත් සෑම පයිතන් නිබන්ධනයකම පැහැදිලිව විස්තර කර ඇත.
තියාගෝ චාවේස්

235

කියවිය හැකි නිත්‍ය ප්‍රකාශන

පයිතන්හිදී ඔබට නිත්‍ය ප්‍රකාශනයක් බහුවිධ රේඛා හරහා බෙදිය හැකිය, ඔබේ ගැලපීම් නම් කරන්න සහ අදහස් ඇතුළත් කරන්න.

උදාහරණ වාචික වාක්‍ය ඛණ්ඩය ( කිමිදුම් සිට පයිතන් දක්වා ):

>>> pattern = """
... ^                   # beginning of string
... M{0,4}              # thousands - 0 to 4 M's
... (CM|CD|D?C{0,3})    # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
...                     #            or 500-800 (D, followed by 0 to 3 C's)
... (XC|XL|L?X{0,3})    # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
...                     #        or 50-80 (L, followed by 0 to 3 X's)
... (IX|IV|V?I{0,3})    # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
...                     #        or 5-8 (V, followed by 0 to 3 I's)
... $                   # end of string
... """
>>> re.search(pattern, 'M', re.VERBOSE)

උදාහරණ නම් කිරීමේ ගැලපීම් ( නිත්‍ය ප්‍රකාශන HOWTO වෙතින් )

>>> p = re.compile(r'(?P<word>\b\w+\b)')
>>> m = p.search( '(((( Lots of punctuation )))' )
>>> m.group('word')
'Lots'

වචනාර්ථයෙන් සම්මුතියට re.VERBOSEස්තූති නොකර ඔබට වාචිකව රීජෙක්ස් ලිවිය හැකිය .

>>> pattern = (
...     "^"                 # beginning of string
...     "M{0,4}"            # thousands - 0 to 4 M's
...     "(CM|CD|D?C{0,3})"  # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
...                         #            or 500-800 (D, followed by 0 to 3 C's)
...     "(XC|XL|L?X{0,3})"  # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
...                         #        or 50-80 (L, followed by 0 to 3 X's)
...     "(IX|IV|V?I{0,3})"  # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
...                         #        or 5-8 (V, followed by 0 to 3 I's)
...     "$"                 # end of string
... )
>>> print pattern
"^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$"

7
පයිතන් විශේෂාංගයක්, බොහෝ RE එන්ජින් වලට වාචික විකල්පයක් ඇතැයි මම සැබවින්ම සලකන්නේ දැයි මම නොදනිමි.
ජෙරමි බෑන්ක්ස්

18
ඔව්, නමුත් ඔබට එය ග්‍රෙප් හෝ බොහෝ සංස්කාරකවරුන් තුළ කළ නොහැකි නිසා, එය ඇති බව බොහෝ දෙනෙක් නොදනිති. වෙනත් භාෂාවන්ට සමාන ලක්‍ෂණයක් තිබීම නිසා එය පයිතන්හි ප්‍රයෝජනවත් හා එතරම් ප්‍රසිද්ධ නැති අංගයක් නොවේ
මාර්ක් බේකර්

7
බොහෝ ප්‍රශස්ත නිත්‍ය ප්‍රකාශන සහිත විශාල ව්‍යාපෘතියක (කියවන්න: යන්ත්‍ර සඳහා ප්‍රශස්තිකරණය කර ඇති නමුත් මිනිසුන් නොවේ), මම උණ්ඩය සපා කෑ අතර ඒවා සියල්ලම වාචික වාක්‍ය ඛණ්ඩයක් බවට පරිවර්තනය කළෙමි. දැන්, නව සංවර්ධකයින් ව්‍යාපෘති සඳහා හඳුන්වා දීම වඩා පහසුය. මෙතැන් සිට අපි සෑම ව්‍යාපෘතියකටම වාචික RE ක්‍රියාත්මක කරමු.
බර්ක් ඩී. ඩෙමීර්

මම කියන්න කැමතියි: සිය ගණනක් = "(CM | CD | D? C {0,3})" # 900 (CM), 400 (CD), ආදිය. භාෂාවට දැනටමත් දේවල් නම් කිරීමට ක්‍රමයක් ඇත, a අදහස් එකතු කිරීමේ ක්‍රමය සහ නූල් ඒකාබද්ධ කිරීමේ ක්‍රමයක්. භාෂාව දැනටමත් හොඳින් කරන දේවල් සඳහා මෙහි විශේෂ පුස්තකාල සින්ටැක්ස් භාවිතා කරන්නේ ඇයි? එය කෙලින්ම පර්ලිස්ගේ එපිග්‍රෑම් 9 ට එරෙහිව යන බව පෙනේ.
කෙන්

3
En කෙන්: රීජෙක්ස් සෑම විටම ප්‍රභවයේ කෙලින්ම නොතිබිය හැකිය, එය සැකසුම් වලින් හෝ වින්‍යාස ගොනුවකින් කියවිය හැකිය. අදහස් දැක්වීමට ඉඩ දීම හෝ අතිරේක සුදු අවකාශය (කියවීමේ හැකියාව සඳහා) විශාල උපකාරයක් විය හැකිය.

222

ක්‍රියාකාරී පරාමිතිය ඉවත් කිරීම

*සහ භාවිතා කරමින් ශ්‍රිත තර්ක ලෙස ඔබට ලැයිස්තුවක් හෝ ශබ්ද කෝෂයක් ඉවත් කළ හැකිය **.

උදාහරණයක් වශයෙන්:

def draw_point(x, y):
    # do some magic

point_foo = (3, 4)
point_bar = {'y': 3, 'x': 2}

draw_point(*point_foo)
draw_point(**point_bar)

ලැයිස්තු, ටුපල් සහ ඩික්ට්ස් බහාලුම් ලෙස බහුලව භාවිතා වන බැවින් ඉතා ප්‍රයෝජනවත් කෙටිමඟකි.


27
* ස්ප්ලැට් ක්‍රියාකරු ලෙසද හැඳින්වේ
ගේබ්‍රියෙල්

3
මම මෙම අංගයට කැමතියි, නමුත් පයිලින්ට් කනගාටුවට කරුණක් නොවේ.
ස්ටීවන් පෝල්ගර්

5
පයිලින්ට්ගේ උපදෙස් නීතියක් නොවේ. අනෙක් ක්‍රමය, අයදුම් කරන්න (අමතන්න, arg_seq, arg_map), 2.3 සිට ඉවත් කරනු ලැබේ.
යාන් වර්නියර්

1
පයිලින්ට්ගේ උපදෙස් නීතිය නොවිය හැකි නමුත් එය හොඳ උපදෙසකි. මේ වගේ දේවල් ඕනෑවට වඩා භාවිතා කරන කේතය නිදොස් කිරීම පිරිසිදු නිරයක්. මුල් පෝස්ටරයේ සටහන් වන පරිදි මෙය ප්‍රයෝජනවත් කෙටිමඟකි .
ඇන්ඩෲ

2
මෙය එක් වරක් කේතයේ භාවිතා වන බව මම දුටුවෙමි. අවාසනාවට "පයිතන් **" සඳහා ගූගල් කිරීම දුෂ්කර ය
ෆ්‍රේසර් ග්‍රැහැම්

205

ROT13 යනු කේත කේතයේ වලංගු කේතීකරණයක් වන අතර, ඔබ කේත ගොනුවේ ඉහළින් නිවැරදි කේතකරණ ප්‍රකාශය භාවිතා කරන විට:

#!/usr/bin/env python
# -*- coding: rot13 -*-

cevag "Uryyb fgnpxbiresybj!".rapbqr("rot13")

10
මහා! බයිට් නූල් වචනාර්ථයෙන් ගන්නා ආකාරය සැලකිල්ලට ගන්න, නමුත් යුනිකෝඩ් නූල් විකේතනය කර ඇත: උත්සාහ කරන්නcevag h"Uryyb fgnpxbiresybj!"
u0b34a0f6ae

12
අවාසනාවට එය
py3k

9
ප්‍රති-වයිරස මග හැරීම සඳහා මෙය හොඳයි.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

96
එයට කේතන ක්‍රමයට කිසිදු සම්බන්ධයක් නැත, එය වේල්සයේ ලියා ඇති පයිතන් පමණි. :-P
ඔලිවියර්

33
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn!
මැනුවෙල් ෆෙරේරියා

183

සම්පූර්ණයෙන්ම ගතික ආකාරයකින් නව වර්ග නිර්මාණය කිරීම

>>> NewType = type("NewType", (object,), {"x": "hello"})
>>> n = NewType()
>>> n.x
"hello"

එය හරියටම සමාන වේ

>>> class NewType(object):
>>>     x = "hello"
>>> n = NewType()
>>> n.x
"hello"

බොහෝ විට වඩාත්ම ප්‍රයෝජනවත් දේ නොව, දැන ගැනීමට ලැබීම සතුටක්.

සංස්කරණය කරන්න : නව වර්ගයක ස්ථාවර නම, ප්‍රකාශය NewTypeහා සමාන විය යුතුය class.

සංස්කරණය කරන්න : විශේෂාංගය වඩාත් නිවැරදිව විස්තර කිරීම සඳහා මාතෘකාව සකස් කරන ලදි.


8
මෙය ප්‍රයෝජනවත් වීමට විශාල විභවයක් ඇත, උදා: JIT ORMs
Mark Cidade

8
ගතික ආදානය මත පදනම්ව HTML-Form පන්ති ජනනය කිරීමට මම එය භාවිතා කරමි. ඉතා කදිමයි!
pi.

15
සටහන: සියලුම පන්ති ධාවන වේලාවේදී නිර්මාණය වේ. එබැවින් ඔබට 'පන්ති' ප්‍රකාශය කොන්දේසි සහිතව හෝ ශ්‍රිතයක් තුළ භාවිතා කළ හැකිය (වසා දැමීම් ලෙස ක්‍රියා කරන පන්ති හෝ පන්තිවල පවුල් නිර්මාණය කිරීම සඳහා ඉතා ප්‍රයෝජනවත් වේ). 'වර්ගය' ගෙන එන වැඩිදියුණු කිරීම නම් ගතිකව ජනනය කරන ලද ගුණාංග සමූහයක් (හෝ පදනම්) පිළිවෙලට අර්ථ දැක්වීමේ හැකියාවයි.
spookylukey

1
ටයිප් ('', (වස්තුව,), {'x': '
blah

3
කේත එන්නත් සඳහා ඉතා ප්‍රයෝජනවත් විය හැකිය.
අවිහු ටර්සියන්

179

සන්දර්භය කළමණාකරුවන් සහ " with" ප්රකාශය

PEP 343 හි හඳුන්වා දී ඇති , සන්දර්භය කළමණාකරු යනු ප්‍රකාශන කට්ටලයක් සඳහා ධාවන කාල සන්දර්භයක් ලෙස ක්‍රියා කරන වස්තුවකි.

විශේෂාංගය නව වචන භාවිතා කරන බැවින්, එය ක්‍රමයෙන් හඳුන්වා දෙනු ලැබේ: එය __future__නියමයෙන් පයිතන් 2.5 හි ලබා ගත හැකිය . පයිතන් 2.6 සහ ඊට වැඩි (පයිතන් 3 ද ඇතුළුව) එය පෙරනිමියෙන් ලබා ගත හැකිය.

මම "සමග" ප්‍රකාශය බොහෝ දුරට භාවිතා කර ඇති බැවින් එය ඉතා ප්‍රයෝජනවත් ඉදිකිරීමක් යැයි මම සිතමි, මෙන්න ඉක්මන් නිරූපණයක්:

from __future__ import with_statement

with open('foo.txt', 'w') as f:
    f.write('hello!')

තිරය ​​පිටුපස මෙහි සිදුවෙමින් පවතින්නේ, “with” ප්‍රකාශය ගොනු වස්තුවෙහි විශේෂ __enter__සහ __exit__ක්‍රම හඳුන්වයි . ව්‍යතිරේක තොරතුරු __exit__ප්‍රකාශන ආයතනයෙන් කිසියම් ව්‍යතිරේකයක් මතු කර ඇත්නම්, එහි ව්‍යතිරේකය හැසිරවීමට ඉඩ සලසයි.

මෙම විශේෂිත අවස්ථාවෙහිදී ඔබ වෙනුවෙන් මෙය කරන්නේ, එය withසාමාන්‍යයෙන් සිදුවන්නේ නම් හෝ ව්‍යතිරේකයක් විසි කර ඇත්ද යන්න නොසලකා, ක්‍රියාත්මක කිරීම කට්ටලයේ විෂය පථයෙන් බැහැර වන විට ගොනුව වසා ඇති බවට සහතික වීමයි. එය මූලික වශයෙන් පොදු ව්‍යතිරේක-හැසිරවීමේ කේතය වියුක්ත කිරීමේ ක්‍රමයකි.

මේ සඳහා භාවිතා වන වෙනත් පොදු අවස්ථා අතරට නූල් සමඟ අගුළු දැමීම සහ දත්ත සමුදා ගනුදෙනු ඇතුළත් වේ.


3
අනාගතයෙන් කිසිවක් ආනයනය කරන කේත සමාලෝචනයක් මම අනුමත නොකරමි . විශේෂාංග ප්‍රයෝජනවත් වීමට වඩා හුරුබුහුටි වන අතර සාමාන්‍යයෙන් ඒවා අවසන් වන්නේ පයිතන් නවකයන් ව්‍යාකූල කරමිනි.
ගෙවන ලද නර්ඩ්

6
ඔව්, කැදැලි විෂය පථ සහ ජනක යන්ත්‍ර වැනි “හුරුබුහුටි” විශේෂාංග ඔවුන් කරන්නේ කුමක්දැයි දන්නා අයට වඩා හොඳය. තවද පයිතන්ගේ අනාගත අනුවාද සමඟ අනුකූල වීමට කැමති ඕනෑම කෙනෙකුට. කැදැලි විෂය පථ සහ උත්පාදක යන්ත්ර සඳහා, පයිතන්ගේ "අනාගත අනුවාද" යන්නෙන් පිළිවෙලින් 2.2 සහ 2.5 වේ. ප්‍රකාශය සමඟ, පයිතන්ගේ “අනාගත අනුවාද” යන්නෙහි තේරුම 2.6 වේ.
ක්‍රිස් බී

10
මෙය නොකියා යා හැක, නමුත් python v2.6 + සමඟ, ඔබට තවදුරටත් අනාගතයෙන් ආනයනය කිරීමට අවශ්‍ය නොවේ . සමඟ දැන් පළමු පන්තියේ මූල පදයකි.
fitzgeraldsteele

25
2.7 දී ඔබට බහුවිධ ප්‍රමාණයක් තිබිය හැකිය withs:) with open('filea') as filea and open('fileb') as fileb: ...
ඔස්ටින් රිචඩ්සන්

5
Ust ඔස්ටින් මට 2.7 හි එම වාක්‍ය ඛණ්ඩය ක්‍රියාත්මක කිරීමට නොහැකි විය. කෙසේ වෙතත් මෙය ක්‍රියාත්මක විය: with open('filea') as filea, open('fileb') as fileb: ...
wim

168

ශබ්දකෝෂවලට ලබා ගැනීමේ () ක්‍රමයක් ඇත

ශබ්ද කෝෂවලට 'get ()' ක්‍රමයක් ඇත. ඔබ යතුර [යතුර] කර යතුර නොමැති නම්, ඔබට ව්‍යතිරේකයක් ලැබේ. ඔබ d.get ('key') කරන්නේ නම්, 'යතුර' නොමැති නම් ඔබට කිසිවක් ආපසු නොලැබේ. කිසිවක් වෙනුවට එම අයිතමය නැවත ලබා ගැනීම සඳහා ඔබට දෙවන තර්කයක් එක් කළ හැකිය, උදා: d.get ('key', 0).

අංක එකතු කිරීම වැනි දේ සඳහා එය විශිෂ්ටයි:

sum[value] = sum.get(value, 0) + 1


39
එසේම, setdefault ක්‍රමය පරීක්ෂා කරන්න.
ඩැරන් තෝමස්

27
තවද, පිරික්සුම් එකතු කිරීම්. defaultdict පන්තිය.
jfs

8
ඔබ පයිතන් 2.7 හෝ ඊට පසු හෝ 3.1 හෝ ඊට පසු භාවිතා කරන්නේ නම්, එකතු කිරීමේ මොඩියුලයේ කවුන්ටරය පන්තිය බලන්න. docs.python.org/library/collections.html#collections.Counter
එලියාස් සමාරියා

ඔහ් මචං, මේ මුළු කාලය පුරාම මම කරමින් සිටිමි get(key, None). Noneපෙරනිමියෙන් සපයන ලද අදහසක් නොතිබුණි .
ජෝර්දාන් රයිටර්

152

විස්තර කරන්නන්

මූලික පයිතන් විශේෂාංග රාශියක් පිටුපස ඇති මැජික් ඒවාය.

සාමාජිකයෙකු බැලීමට ඔබ තිත් ප්‍රවේශය භාවිතා කරන විට (උදා: xy), පයිතන් පළමුව නිදර්ශන ශබ්ද කෝෂයේ සාමාජිකයා සොයයි. එය සොයාගත නොහැකි නම්, එය පන්ති ශබ්ද කෝෂයේ එය සොයයි. එය පන්ති ශබ්ද කෝෂයේ සොයාගත හොත්, වස්තුව විස්තර කිරීමේ ප්‍රොටෝකෝලය ක්‍රියාත්මක කරන්නේ නම්, එය ආපසු ලබා දෙනවා වෙනුවට, පයිතන් එය ක්‍රියාත්මක කරයි. ඒ descriptor කියාත්මක කරන ඕනෑම පන්තිය යි __get__, __set__හෝ __delete__ක්රම.

විස්තර කරන්නන් භාවිතා කරමින් ඔබේම (කියවීමට පමණි) දේපල අනුවාදය ක්‍රියාත්මක කරන්නේ කෙසේද යන්න මෙන්න:

class Property(object):
    def __init__(self, fget):
        self.fget = fget

    def __get__(self, obj, type):
        if obj is None:
            return self
        return self.fget(obj)

ඔබ එය ගොඩනඟන ලද දේපල මෙන් භාවිතා කරයි ():

class MyClass(object):
    @Property
    def foo(self):
        return "Foo!"

ගුණාංග, බැඳී ඇති ක්‍රම, ස්ථිතික ක්‍රම, පන්ති ක්‍රම සහ තව් ආදිය ක්‍රියාත්මක කිරීම සඳහා විස්තර පයිතන් හි භාවිතා වේ. ඒවා අවබෝධ කර ගැනීමෙන් පෙර පයිතන් 'විචක්ෂණ' ලෙස පෙනෙන බොහෝ දේ ඒවා වන්නේ මන්දැයි බැලීමට පහසු වේ.

රේමන්ඩ් හෙට්ටිංගර්ට විශිෂ්ට නිබන්ධනයක් ඇත, එය මට වඩා විස්තර කිරීමට වඩා හොඳ කාර්යයක් කරයි.


මෙය සැරසිලි කරුවන්ගේ අනුපිටපතක් නේද? ( stackoverflow.com/questions/101268/… )
gecco

2
නැත, සැරසිලි කරන්නන් සහ විස්තර කරන්නන් සම්පූර්ණයෙන්ම වෙනස් දේවල් වේ, උදාහරණ කේතයේ වුවද, මම විස්තර කිරීමේ සැරසිලි කරුවෙකු නිර්මාණය කරමි. :)
නික් ජොන්සන්

1
මෙය කළ හැකි අනෙක් ක්‍රමය වන්නේ ලැම්බඩා සමඟ ය:foo = property(lambda self: self.__foo)
පීට් පීටර්සන්

1
EtPetePeterson ඔව්, නමුත් propertyඑය මගේ තනතුරේ කාරණය වූ විස්තර කරන්නන් සමඟ ක්‍රියාත්මක වේ.
නික් ජොන්සන්

142

කොන්දේසිගත පැවරුම

x = 3 if (y == 1) else 2

එය හරියටම පෙනෙන ආකාරයටම කරයි: "y 1 නම් 3 සිට x දක්වාද, එසේ නොමැතිනම් 2 සිට x දක්වාද යොදන්න". පාරෙන්ස් අවශ්‍ය නොවන බව මතක තබා ගන්න, නමුත් කියවීමට ඔවුන් කැමතියි. ඔබට වඩා සංකීර්ණ යමක් ඇත්නම් ඔබට එය දම්වැල් කළ හැකිය:

x = 3 if (y == 1) else 2 if (y == -1) else 1

එක්තරා අවස්ථාවක දී එය ටිකක් දුර යයි.

ඔබට ඕනෑම ප්‍රකාශනයක නම් ... වෙනත් ආකාරයකින් භාවිතා කළ හැකි බව සලකන්න. උදාහරණයක් වශයෙන්:

(func1 if y == 1 else func2)(arg1, arg2) 

Y 1 නම් සහ func2 නම් මෙහි func1 අමතනු ඇත. මෙම අවස්ථා දෙකෙහිම අනුරූප ශ්‍රිතය arg1 සහ arg2 තර්ක සමඟ කැඳවනු ලැබේ.

ප්‍රතිසම වශයෙන්, පහත සඳහන් දෑ ද වලංගු වේ:

x = (class1 if y == 1 else class2)(arg1, arg2)

පන්ති 1 සහ පන්ති 2 පන්ති දෙකකි.


29
පැවරුම විශේෂ කොටස නොවේ. ඔබට පහසුවෙන්ම මෙවැනි දෙයක් කළ හැකිය: 3 නම් (y == 1) වෙනත් 2. ආපසු
බ්‍රයන්

25
ඒ විකල්ප ක්‍රමය මම නොපැහැදිලි පයිතන් දුටු පළමු අවස්ථාවයි.
ක්‍රේග් මැක්වීන්

3
කයිල්බ ro ක්ස්: එය එසේ නොවේ, බූලියන් ක්‍රියාකරුවන් කෙටි පරිපථයකි. එය තක්සේරු කරන්නේ 2 (bool) නම් පමණි (3) == අසත්‍යය.
රෝඩි රිච්

15
මෙම පසුගාමී විලාසිතාවේ කේතනය මා ව්‍යාකූල කරයි. වැනි දෙයක් x = ((y == 1) ? 3 : 2)මට වඩාත් අර්ථවත් කරයි
mpen

13
Ark මාක්, සී-ස්ටයිල් ත්‍රිමාණ ක්‍රියාකරුවන් නිතරම මාව ව්‍යාකූල කර ඇති බව මට හැඟේ. මම වඩාත් කැමති පයිතන්ගේ තෘතීය වාක්‍ය ඛණ්ඩයටයි.
ජෙෆ්රි හැරිස්

141

ආචාර්ය : එකවර ප්‍රලේඛනය සහ ඒකක පරීක්ෂා කිරීම.

පයිතන් ප්‍රලේඛනයෙන් උපුටා ගත් උදාහරණය:

def factorial(n):
    """Return the factorial of n, an exact integer >= 0.

    If the result is small enough to fit in an int, return an int.
    Else return a long.

    >>> [factorial(n) for n in range(6)]
    [1, 1, 2, 6, 24, 120]
    >>> factorial(-1)
    Traceback (most recent call last):
        ...
    ValueError: n must be >= 0

    Factorials of floats are OK, but the float must be an exact integer:
    """

    import math
    if not n >= 0:
        raise ValueError("n must be >= 0")
    if math.floor(n) != n:
        raise ValueError("n must be exact integer")
    if n+1 == n:  # catch a value like 1e300
        raise OverflowError("n too large")
    result = 1
    factor = 2
    while factor <= n:
        result *= factor
        factor += 1
    return result

def _test():
    import doctest
    doctest.testmod()    

if __name__ == "__main__":
    _test()

6
වෛද්‍යවරුන් නිසැකවම සිසිල් ය, නමුත් යමක් ව්‍යතිරේකයක් මතු කළ යුතු දැයි පරීක්ෂා කිරීම සඳහා ඔබ ටයිප් කළ යුතු සියලු කපටිකමට මම අකමැතියි
ටී.එම්.

60
වෛද්‍යවරුන් අධි තක්සේරු කර ඇති අතර ප්‍රලේඛනය දූෂණය කරයි. කිසිදු සැකසුමකින් තොරව ඔබ කොපමණ වාරයක් ස්වාධීන ශ්‍රිතයක් පරීක්ෂා කරන්නේද?
ගෙවන ලද නර්ඩ්

2
කවුද කියන්නේ ඔබට ආචාර්ය උපාධියක් ලබා ගත නොහැකි බව? සන්දර්භය ජනනය කරන ශ්‍රිතයක් ලියන්න, locals()ඉන්පසු ඔබේ ආචාර්ය උපාධියේ do locals().update(setUp())= D
Jiaaro

12
හුදකලා ශ්‍රිතයකට සැකසීමක් අවශ්‍ය නම්, එය සම්බන්ධයක් නැති දේවල් වලින් වෙන් කොට පන්තියකට දැමිය හැකි අවස්ථා වැඩිය. පංති ඩොක්ටෙස්ට් නාම අවකාශය පසුව පන්ති ක්‍රමවේදය තුළ නැවත භාවිතා කළ හැකිය, එබැවින් එය සෙට්අප් වැනි ය, ඩ්‍රයි සහ කියවිය හැකි ය.
ඇන්ඩි මිහයිලෙන්කෝ

4
"ඔබ කොපමණ වාරයක් ස්වාධීන ශ්‍රිතයක් පරීක්ෂා කරන්නේද" - කැබලි අක්ෂර. මම මුහුණත තීරණය කිරීමේදී නිර්මාණ ක්‍රියාවලියෙන් බොහෝ විට ස්වභාවධර්මයන් මතුවන බව මට පෙනේ.
ග්‍රෙග් ලින්ඩ්

138

නම් කිරීම

%-ආකෘතිකරණය ශබ්දකෝෂයක් ගනී (% i /% s ආදිය වලංගු කිරීම ද අදාළ වේ).

>>> print "The %(foo)s is %(bar)i." % {'foo': 'answer', 'bar':42}
The answer is 42.

>>> foo, bar = 'question', 123

>>> print "The %(foo)s is %(bar)i." % locals()
The question is 123.

ප්‍රදේශවාසීන් () ද ශබ්ද කෝෂයක් බැවින් ඔබට එය ආ ict ාවක් ලෙස සම්මත කර ඔබේ දේශීය විචල්‍යයන්ගෙන්% -ප්‍රතිස්ථාපන ලබා ගත හැකිය. මම හිතන්නේ මෙය කෝපයට පත් වී ඇති නමුත් දේවල් සරල කරයි ..

නව විලාසිතාවේ හැඩතල ගැන්වීම

>>> print("The {foo} is {bar}".format(foo='answer', bar=42))

60
ක්‍රමානුකූලව ඉවත් කර අවසානයේදී නූල් ආකෘතිය () ක්‍රමය මඟින් ප්‍රතිස්ථාපනය වේ.
කොන්ස්ටන්ටින්

3
සන්දර්භය සඳහා විචල්ය නාමයන් නොමැතිව ආකෘති නූල් බැලීමට නැඹුරු බැවින් පරිවර්තකයන්ට නම් කරන ලද ආකෘතිකරණය ඉතා ප්රයෝජනවත් වේ
පික්සෙල්බීට්

2
පයිතන් 3.0.1 හි වැඩ කිරීමට පෙනේ (මුද්‍රණ ඇමතුම වටා වරහන් එකතු කිරීමට අවශ්‍ය වේ).
පැසි සැවොලයිනන්

9
එය එහි පූරක , හහ්? ඔබ පැමිණියේ කොහෙන්දැයි මට පෙනේ.
ෂයිලන්ට්

11
% s ආකෘතිකරණය පියවරෙන් පියවර ඉවත් නොකෙරේ. str.format () නිසැකවම වඩා පයිතොනික් වේ, කෙසේ වෙතත් ඇත්ත වශයෙන්ම සරල නූල් ආදේශ කිරීම සඳහා 10x මන්දගාමී වේ. මගේ විශ්වාසය නම්% s හැඩතල ගැන්වීම තවමත් හොඳම පුහුණුවයි.
කෙනත් රීට්ස්

132

තවත් පයිතන් මොඩියුල එකතු කිරීම සඳහා (විශේෂයෙන් තෙවන පාර්ශවීය ඒවා), බොහෝ අය පයිතන්පාත් පරිසර විචල්‍යයන් භාවිතා කරන බවක් පෙනේ, නැතහොත් ඔවුන් ඔවුන්ගේ අඩවි පැකේජ නාමාවලිවල සමමුහුර්ත හෝ නාමාවලි එක් කරයි. තවත් ක්‍රමයක් නම්, * .pth ගොනු භාවිතා කිරීමයි. නිල පයිතන් ලේඛනයේ පැහැදිලි කිරීම මෙන්න:

"[පයිතන්ගේ සෙවුම් මාර්ගය වෙනස් කිරීමට] වඩාත්ම පහසු ක්‍රමය වන්නේ දැනටමත් ... / අඩවි පැකේජ / නාමාවලියට දැනටමත් පයිතන්ගේ මාවතේ ඇති නාමාවලියකට මාර්ග වින්‍යාස ගොනුවක් එක් කිරීමයි. මාර්ග වින්‍යාස ගොනු වල .pth , සහ සෑම පේළියකම sys.path වෙත එකතු වන තනි මාර්ගයක් අඩංගු විය යුතුය. (නව මාර්ග sys.path සමඟ එකතු වී ඇති හෙයින්, එකතු කරන ලද නාමාවලිවල මොඩියුලයන් සම්මත මොඩියුලයන් අභිබවා නොයනු ඇත.මේ අර්ථය ඔබට මෙම යාන්ත්‍රණය භාවිතා කළ නොහැක සම්මත මොඩියුලවල ස්ථාවර අනුවාදයන් ස්ථාපනය කිරීම සඳහා.) "


1
අඩවි ඇසුරුම් නාමාවලියෙහි ඇති .pth ගොනුව සෙටප්ටූල් වලින් සහ මෙම අදහස අතර සම්බන්ධය මා කිසි විටෙකත් කර නැත. නියමයි.
dave paola

122

ව්‍යතිරේකය වෙනත් වගන්තිය:

try:
  put_4000000000_volts_through_it(parrot)
except Voom:
  print "'E's pining!"
else:
  print "This parrot is no more!"
finally:
  end_sketch()

උත්සාහය වගන්තියට අතිරේක කේත එකතු කිරීමට වඩා වෙනත් වගන්තිය භාවිතා කිරීම වඩා හොඳය, මන්ද එය උත්සාහයෙන් ආරක්‍ෂා කර ඇති කේතය මගින් මතු නොකළ ව්‍යතිරේකයක් අහම්බෙන් අල්ලා ගැනීම වළක්වයි ... ප්‍රකාශය හැර.

Http://docs.python.org/tut/node10.html බලන්න


8
+1 මෙය නියමයි. ව්‍යතිරේක බ්ලොක් ඇතුළු නොකර උත්සාහක වාරණය ක්‍රියාත්මක වන්නේ නම්, අනෙක් කොටස ඇතුල් කරනු ලැබේ. ඇත්ත වශයෙන්ම, අවසාන වාරණය ක්‍රියාත්මක වේ
පරීක්ෂක

මට අන්තිමට තේරුණා ඇයි 'වෙන' තියෙන්නේ කියලා! ස්තූතියි.
taynaron

දිගටම භාවිතා කිරීම වඩාත් අර්ථවත් වනු ඇත, නමුත් මම හිතන්නේ එය දැනටමත් ගෙන ඇත;)
Paweł Prażak

Python2 හි පැරණි අනුවාද වල ඔබට වෙනත් දෙකම තිබිය නොහැකි බව සලකන්න: අවසාන වශයෙන්: එකම උත්සාහයක් සඳහා වගන්ති: වාරණය
කෙවින් හෝන්

1
@ පාවේ ප්‍ර ż ක්, කෙවින් හෝන් සඳහන් කළ පරිදි, මෙම වාක්‍ය ඛණ්ඩය හඳුන්වා දෙනු ලැබුවේ පයිතන් මුලින් නිකුත් කිරීමෙන් පසුව වන අතර පවතින භාෂාවට නව වෙන් කළ වචන එකතු කිරීම සැමවිටම ගැටළු සහගතය. පවතින යතුරු පදයක් සාමාන්‍යයෙන් නැවත භාවිතා කරන්නේ එබැවිනි (මෑත C ++ ප්‍රමිතියේ cf "auto").
කොන්ස්ටන්ටින්

114

ව්‍යතිරේකයන් නැවත මතු කිරීම :

# Python 2 syntax
try:
    some_operation()
except SomeError, e:
    if is_fatal(e):
        raise
    handle_nonfatal(e)

# Python 3 syntax
try:
    some_operation()
except SomeError as e:
    if is_fatal(e):
        raise
    handle_nonfatal(e)

දෝෂ හසුරුවන්නෙකු තුළ කිසිදු තර්කයක් නොමැති 'නැගිටීම' ප්‍රකාශය පයිතන්ට පවසන්නේ මුල් ලුහුබැඳීම සමඟ ව්‍යතිරේකය නැවත ඉහළ නංවන ලෙසයි . එවිට ඔබට "ඔහ්, සමාවෙන්න, සමාවෙන්න, මම එය අල්ලා ගැනීමට අදහස් නොකළෙමි, සමාවෙන්න, සමාවෙන්න. "

මුල් ලුහුබැඳීම සමඟ මුද්‍රණය කිරීමට, ගබඩා කිරීමට හෝ ෆෙඩල් කිරීමට ඔබට අවශ්‍ය නම්, ඔබට එය sys.exc_info () සමඟ ලබා ගත හැකි අතර, පයිතන් මෙන් මුද්‍රණය කිරීම 'ට්‍රේස්බැක්' මොඩියුලය සමඟ සිදු කෙරේ.


කණගාටුයි නමුත් මෙය සෑම භාෂාවකම පාහේ දන්නා සහ පොදු ලක්ෂණයකි.
ලූකස් එස්.

6
ඇල අකුරු පෙළ සටහන් කරන්න. සමහර අය ඒ raise eවෙනුවට කරනු ඇත, එය මුල් ලුහුබැඳීම ආරක්ෂා නොකරයි.
හබ්නාබිට්

12
සමහර විට වඩාත් ඉන්ද්‍රජාලික, මෙයට exc_info = sys.exc_info(); raise exc_info[0], exc_info[1], exc_info[2]සමාන වේ, නමුත් ඔබට එම අගයන් වටා වෙනස් කළ හැකිය (උදා: ව්‍යතිරේක වර්ගය හෝ පණිවිඩය වෙනස් කරන්න)
ianb

3
Uc ලූකස් එස්. හොඳයි, මම එය නොදැන සිටියෙමි, එය මෙහි ලියා තිබීම ගැන මට සතුටුයි.
ඊ-තෘප්තිමත්

මම මෙහි මගේ යෞවනය පෙන්වන්නට ඇත, නමුත් මම සෑම විටම පයිතන් 3 සින්ටැක්ස් පයිතන් 2.7 හි කිසිදු ගැටළුවක් නොමැතිව භාවිතා කර ඇත
wim

106

ප්‍රධාන පණිවිඩ :)

import this
# btw look at this module's source :)

ඩී-සයිෆර්ඩ් :

ටිම් පීටර්ස් විසින් රචිත සෙන් ඔෆ් පයිතන්

ලස්සන කැතට වඩා හොඳයි.
ව්‍යංගයට වඩා පැහැදිලිය.
සරල දේට වඩා සංකීර්ණයි.
සංකීර්ණය සංකීර්ණ වීමට වඩා හොඳයි.
පැතලි කැදැල්ලට වඩා හොඳයි.
විරල ense නත්වයට වඩා හොඳයි.
කියවීමේ හැකියාව ගණන් කරයි.
විශේෂ අවස්ථා නීති කඩ කිරීමට තරම් විශේෂ නොවේ.
ප්‍රායෝගිකත්වය පාරිශුද්ධත්වයට පහර දුන්නද.
දෝෂ කිසි විටෙක නිහ .ව සම්මත නොවිය යුතුය.
පැහැදිලිව නිහ ced නොකළහොත්.
අපැහැදිලි තත්වයන් හමුවේ, අනුමාන කිරීමට ඇති පෙළඹවීම ප්‍රතික්ෂේප කරන්න. එකක් තිබිය යුතුය - වඩාත් සුදුසු වන්නේ එය කිරීමට එක් - පැහැදිලි ක්‍රමයක් පමණි.
ඔබ ලන්දේසි ජාතිකයෙකු නොවේ නම් මුලදී එය පැහැදිලිව පෙනෙන්නට නැත.
දැන් වෙන කවරදාටත් වඩා හොඳයි.
කිසි විටෙකත් වඩා හොඳ නැතඅයිතිය දැන්.
ක්‍රියාත්මක කිරීම පැහැදිලි කිරීමට අපහසු නම් එය නරක අදහසකි.
ක්‍රියාත්මක කිරීම පැහැදිලි කිරීමට පහසු නම්, එය හොඳ අදහසක් විය හැකිය.
නාම අවකාශයන් යනු ඉතා හොඳ අදහසකි - අපි ඒවායින් වැඩි ප්‍රමාණයක් කරමු!


1
මූලාශ්‍රය ඒ ආකාරයෙන් සයිෆර් කර ඇත්තේ මන්දැයි කිසියම් අදහසක් තිබේද? එය විනෝදය සඳහා පමණක්ද, නැත්නම් වෙනත් හේතුවක් තිබේද?
මිනි ක්වාර්ක්

42
ප්‍රභවය ලියා ඇති ආකාරය සෙන්ට එරෙහිව යයි!
hasen


2
මම මගේ /usr/lib/python2.6/this.py යාවත්කාලීන කර ඇති අතර පැරණි කේතය මේ සමඟ ප්‍රතිස්ථාපනය කර ඇති print s.translate("".join(chr(64<i<91 and 65+(i-52)%26 or 96<i<123 and 97+(i-84)%26 or i) for i in range(256)))අතර එය දැන් වඩා හොඳ පෙනුමක් ඇත !! :-D
fortran

2
@MiniQuark: ඉක්මන් ඉතිහාස පාඩම: wefearchange.org/2010/06/import-this-and-zen-of-python.html

105

අන්තර් ක්‍රියාකාරී පරිවර්තක පටිත්ත සම්පූර්ණ කිරීම

try:
    import readline
except ImportError:
    print "Unable to load readline module."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")


>>> class myclass:
...    def function(self):
...       print "my function"
... 
>>> class_instance = myclass()
>>> class_instance.<TAB>
class_instance.__class__   class_instance.__module__
class_instance.__doc__     class_instance.function
>>> class_instance.f<TAB>unction()

ඔබට PYTHONSTARTUP පරිසර විචල්‍යයක් සැකසීමටද සිදුවේ.


2
මෙය ඉතා ප්‍රයෝජනවත් ලක්ෂණයකි. එය සක්‍රීය කිරීම සඳහා මා සතුව සරල පිටපතක් ඇත (ඊට අමතරව තවත් ස්වයං විමර්ශන
pixelbeat

43
IPython ඔබට මෙම ප්ලස් ටොන් ගණනක් ලබා දෙයි
akaihola

සාමාන්‍ය පයිතන් විමසුමට වඩා මෙය පීඩීබී විමසුමට වඩා ප්‍රයෝජනවත් වනු ඇත (අයිපයිතන් කෙසේ හෝ එම අරමුණු ඉටු කරයි). කෙසේ වෙතත්, මෙය පීඩීබී විමසුමේදී ක්‍රියා කරන බවක් නොපෙනේ, බොහෝ විට පීඩීබී ටැබ් සඳහා තමන්ගේම බැඳ තබන නිසා (එය අඩු ප්‍රයෝජනවත් වේ). මම pdb විමසුමේදී parse_and_bind () ඇමතීමට උත්සාහ කළ නමුත් එය තවමත් ක්‍රියාත්මක නොවීය. IPython සමඟ pdb විමසුමක් ලබා ගැනීමේ විකල්පය වැඩි වැඩකි, එබැවින් මම එය භාවිතා නොකිරීමට නැඹුරු වෙමි.
haridsv

2
@haridsv - easy_install ipdb- එවිට ඔබට භාවිතා කළ හැකියimport ipdb; ipdb.set_trace()
ඩග් හැරිස්

1
Osx හි [සහ මම සිතන්නේ libedit භාවිතා කරන වෙනත් පද්ධති] - ඔබ කළ යුතුව ඇත්තේreadline.parse_and_bind ("bind ^I rl_complete")
Foo Bah

91

කැදැලි ලැයිස්තු අවබෝධය සහ උත්පාදක ප්‍රකාශන:

[(i,j) for i in range(3) for j in range(i) ]    
((i,j) for i in range(4) for j in range(i) )

මේවාට කූඩු-ලූප් කේතයේ විශාල කොටස් ආදේශ කළ හැකිය.


"j පරාසය සඳහා (i)" - මෙය අක්ෂර වින්‍යාසයක්ද? සාමාන්‍යයෙන් ඔබට i සහ j සඳහා ස්ථාවර පරාසයන් අවශ්‍ය වේ. ඔබ 2d අරාවකට ප්‍රවේශ වන්නේ නම්, ඔබේ මූලද්‍රව්‍යවලින් අඩක් ඔබට මග හැරෙනු ඇත.
පීටර් ගිබ්සන්

මම මෙම උදාහරණයේ කිසිදු අරාවකට ප්‍රවේශ නොවෙමි. මෙම කේතයේ එකම පරමාර්ථය වන්නේ අභ්‍යන්තර පරාසයන්ගෙන් ලැබෙන ප්‍රකාශයන්ට පිටතින් එන ඒවාට ප්‍රවේශ විය හැකි බව පෙන්වීමයි. අතුරු product ලය යනු 4> x> y> 0 වැනි යුගල (x, y) ලැයිස්තුවකි.
රෆා ඩව්ගර්ඩ්

2
කැල්කියුලස්හි ද්විත්ව අනුකලනය හෝ ද්විත්ව සාරාංශය වැනි වර්ග කිරීම.
යූ

22
මෙහි මතක තබා ගත යුතු ප්‍රධාන කරුණ නම් (මට අවබෝධ කර ගැනීමට බොහෝ කාලයක් ගත විය) forප්‍රකාශවල අනුපිළිවෙල පිටතින් සිට ඇතුළත සිට සම්මත ලූපයක් සඳහා ලිවිය යුතු යැයි ඔබ අපේක්ෂා කරන අනුපිළිවෙලට ලිවිය යුතුය.
sykora

2
සිකෝරාගේ අදහස් දැක්වීමට එක් කිරීම සඳහා: ඔබ ආරම්භ කරන්නේ ඇතුළත සිට fors සහ ifs තොගයක් සමඟ යැයි සිතන්න yield x. එය උත්පාදක ප්‍රකාශනයක් බවට පරිවර්තනය කිරීම සඳහා, xපළමුව චලනය කරන්න , සියලු කොලෝන් (සහ yield) මකා දමා, වරහන් තුළ මුළු දේම වට කරන්න. ඒ වෙනුවට ලැයිස්තු අවබෝධයක් ලබා ගැනීම සඳහා, පිටත වරහන් වර්ග වරහන් මගින් ආදේශ කරන්න.
කෙන් ආර්නෝල්ඩ්

91

setබිල්ඩින් සඳහා ක්‍රියාකරු අධි පැටවීම :

>>> a = set([1,2,3,4])
>>> b = set([3,4,5,6])
>>> a | b # Union
{1, 2, 3, 4, 5, 6}
>>> a & b # Intersection
{3, 4}
>>> a < b # Subset
False
>>> a - b # Difference
{1, 2}
>>> a ^ b # Symmetric Difference
{1, 2, 5, 6}

සම්මත පුස්තකාල යොමුවෙන් වැඩි විස්තර: වර්ග සකසන්න


නිබන්ධනයේ දී, අර්ධ වශයෙන් docs.python.org/tutorial/datastructures.html#sets
XTL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.