2016-05-31 3 views
0

Похоже, pass - просто зарезервированное слово, которое действительно не нужно. Python может использовать соглашение о выполнении одной строки None, чтобы выполнить одно и то же.Какова цель заявления `pass`?

Например, я вижу очень мало разницы между

while doing_a_thing(): 
    pass 

и

while doing_a_thing(): 
    None 

небось, имеющий pass немного более удобным для чтения, но на мой взгляд, это плохой компромисс в отношении удаления такое общее слово из выбора функций/переменных.

Просто интересно, знает ли кто-нибудь больше истории и/или использования Python, о которых я не знаю.

+3

Возможно, можно утверждать, что значение «Нет» в одной строке более запутанно, чем введение нового оператора ('pass'). –

+0

Да, это было бы еще одно соглашение, чтобы учиться. Но на Python я думаю, что тенденция (по праву) заключается в предоставлении большей свободы программисту в обмен на обучение и соблюдение разумного набора конвенций. –

+0

Ну, так как у нас нет скобок для обозначения пустого тела чего-то, нужно было включить какое-то не-операционное заявление. О том, почему «пройти», а не какое-то другое слово, я предполагаю, что это на первый взгляд. –

ответ

7

None уже имеет смысл в Python. Это не заявление, а a value. Его можно использовать для обозначения переменной, которая еще не имеет стандартного значения, или как «возвращаемое значение» функции, которая ничего не возвращает.

Так что использование его в качестве заявления будет более запутанным, чем использование нового ключевого слова pass.

+0

Это не новое применение, просто выражение, которое не сохраняет его значение. Вы можете использовать '0' или' math.pi' или '2 + 2' или' 'pass" 'для этой же цели. – kindall

+0

@kindall: Вы правы, конечно, но у меня не было времени, чтобы добавить детали. ZWiki добавил некоторые, поэтому мне не нужно. Моя точка зрения заключается в том, что использование значения для * действия в качестве нулевого оператора * будет путать. Я знаю, что он может это сделать, но в Python [«Явный лучше, чем неявный»] (https://www.python.org/dev/peps/pep-0020/). –

4

Я собираюсь поиграть с Рори здесь немного.

None - значение, а pass - заявление.

Например, если вы хотите, значение по умолчанию для функции вы бы

def my_func(val1, val2=None): 
    # Some stuff here 

Где None используется для обозначения того, что значение по умолчанию val2 нет.

Если у вас есть класс, тем не менее, вы можете увидеть pass таким образом:

class MyClass(object): 
    def __init__(self): 
     pass 

Где pass может быть там, потому что вы хотите, чтобы определить метод __init__ позже, или для обозначения, что он ничего не делает для класс.

В любом случае, pass должен сказать: «Я мог бы что-то здесь сделать, но я предпочитаю не делать этого». И None является фактическое значение, которое вы явно означает сказать «Да, я даю это значение None

EDIT:.
я понимаю больше путаницы в настоящее время

Потому что вы видите, что:

class MyClass(object): 
    def __init__(self): 
     pass 

может быть написана как

class MyClass(object): 
    def __init__(self): 
     None 

Это не Питоны способ сказать, что None эквивалентен pass здесь. Он просто говорит, что предоставление только value как нет-op, будет иметь такой же эффект.Так это значит, что я мог бы также сделать:

class MyClass(object): 
    def __init__(self): 
     12 

И это, конечно, не имеет смысла, почему бы вам когда-нибудь ставить 12 там? Дело здесь в том, что эффекты одинаковы, но в этом случае значения различны. И во многих случаях None и pass не являются взаимозаменяемыми, такими как аргументы по умолчанию

+0

Хороший улов. Я имел в виду утверждение, но всегда думаю об этом как ополнительном элементе для себя – ZWiki

+0

Я хочу сказать, что в вашем примере вы могли бы заменить 'pass' на' None', и код будет вести себя точно так же. –

+0

@PeteCacioppi, да, но я мог бы заменить 'pass' на' None' или любое другое значение, например '12'. Дело не в том, что 'None' эквивалентно' pass' здесь, но вы можете поместить любое 'значение' под' init', и он ничего не сделает. – ZWiki

Смежные вопросы