Форум сайта python.su
Есть строка типа “name#val1#val2”
где, name - обязательный параметр; val1 и val2 необязятельные параметры и имеют значение по умолчанию, заданое ранее; решетка - разделитель.
Т.е. может быть три варианта:
name
name#val1
name#val1#val2
str="name#val1#val2"
val1 = val2 = "default value"
if '#' in str:
lst=str.split('#')
name = lst[0]
val1 = lst[1]
if len(lst) == 3:
val2 = lst[2]
else:
name = str
Офлайн
def getname_val(a,a1="default value",a2="default value"):
return a,a1,a2
s="name!#val1#12"
name,val1,val2 = getname_val(*s.split('#'))
print name,val1,val2
Офлайн
ой-ой :)
что-то я не пойму как это работает. Вот та звездочка, что означает? А то даже не знаю какие доки искать :rolleyes:
Офлайн
sp3Я думаю многие. Вот не самый короткий пример:
кто короче напишет ?
name, val1, val2 = (s.split('#') + ["default value"]*2)[:3]
Отредактировано (Окт. 31, 2010 12:33:28)
Офлайн
EdВот это я понял как работает. Красиво :)
Я думаю многие. Вот не самый короткий пример:
Офлайн
st01enНапример, так, для разнообразия:
а что если строку развернуть, т.е. например val1#val2#name
name, val2, val1 = ("default value#"*2 + s).split('#')[-1:-4:-1]
Отредактировано (Окт. 31, 2010 15:01:26)
Офлайн
Круто :)
Вот так все просто кажется когда увидел, почему ж самому такие мысли в голову не приходят? :)
Спасибо.
Офлайн
А руглярки не катят?
str="name#val1#val2"
print re.match(r"(?P<name>.*?)(?![^#])", str).group("name")
Офлайн
alexx11Ну почему же не катят. Только добавьте import re и удлинните регулярку для получения val1 и val2.
А руглярки не катят?
Офлайн
val1, val2 - ТС сказал вроде не надо ему.
Офлайн