Я собираюсь поиграть с Рори здесь немного.
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
не являются взаимозаменяемыми, такими как аргументы по умолчанию
Возможно, можно утверждать, что значение «Нет» в одной строке более запутанно, чем введение нового оператора ('pass'). –
Да, это было бы еще одно соглашение, чтобы учиться. Но на Python я думаю, что тенденция (по праву) заключается в предоставлении большей свободы программисту в обмен на обучение и соблюдение разумного набора конвенций. –
Ну, так как у нас нет скобок для обозначения пустого тела чего-то, нужно было включить какое-то не-операционное заявление. О том, почему «пройти», а не какое-то другое слово, я предполагаю, что это на первый взгляд. –