Пишу скрипт на питоне. У функции несколько агрументов. Если один из них не задан, не должно выполнятся действие, связанное в этим аргументом. Как такое можно сделать?
(чертово форматирование)
эм, как минимум так:
def func(arg1=None,arg2=None,...):
""" My super function. """
if arg1!=None:
process_a1()
if arg2!=None:
process_a2()
...
А если аргумент пустой? Значение аргумента берется из параметров запуска скрипта. Если параметр не задан, то и аргумент будет пуст. И действие, связанное с ним выполнять не нужно. В таком случае ваш вариант подойдет?
Как вариант:
import sys
def func(*args):
if 'help' in args:
print 'HELP'
if 'aaa' in args:
print 'AAA'
func(*sys.argv)
Если аргументы простые (не типа var=val), то пойдёт.
Ещё как вариант сделать хэш типа:
lookup_table = {
'help': help_func,
'aaa': aaa_func,
'bbb': bbb_func,
}
И потом вызывать функцию по таблице.
if argTup[4]:
newName = argTup[4]
else:
newName = None
Опять-же newName - это локальная переменная в функции и когда делается
return берется значение неинициализированной переменной.
Большое спасибо :) Я только начал изучать питон. А не посоветуете толковую книжку по питону для начинающего, или в инете что-нибудь на русском желательно.
if not c гораздо медленнее чем if c is not None, т.к. первое полезет искать и выполнять __len__, __empty__, а то еще и через __getattr__ и дескрипторы пройдет, а второе просто сравнит сишные указатели.
Также читайте PEP 8 до просветления, там четко написано:
Comparisons to singletons like None should always be done with 'is' or 'is not', never the equality operators.
Also, beware of writing "if x" when you really mean "if x is not None" -- e.g. when testing whether a variable or argument that defaults to None was set to some other value.