LINUX.ORG.RU

python Стиль var = if true else false

 


0

2

Что, по вашему мнению, более наглядно и молодёжно.

Вариант №1:

 var1, var2, var3 = [None, None, None]
 if 'string1-name' in dict_name: var1 = dict_name['string1-name']
 if 'string2-name' in dict_name: var2 = dict_name['string2-name']
 if 'string3-name' in dict_name: var3 = dict_name['string3-name']
Вариант №2
var1 = dict_name['string1-name'] if 'string1-name' in dict_name else None
var2 = dict_name['string2-name'] if 'string2-name' in dict_name else None
var3 = dict_name['string3-name'] if 'string3-name' in dict_name else None

Оба варианта вмещаются в 80 символов. Также, количество строк (3) никогда не будет меняться.

Ответ на: комментарий от true_admin

Там и так по дефолту None, так что просто .get('key').

Куда более интересен вопрос, как удалять из дикта без получения KeyError?

anonymous
()
keys = ('string1-name', 'string2-name', 'string3-name')
var1, var2, var3 = [dict_name.get(x) for x in keys]
anonymous
()
Ответ на: комментарий от anonymous

ТьфуЮ и правда... ТС до сих пор набивает код на перфокартах? Я тоже себе ридер хочу, винтажно так...

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Nevermind, тут таки надо указывать дефолтное значение.

anonymous
()
Ответ на: комментарий от anonymous

Я понимаю что в гугле забанили, но в питоне то вроде нет?;-)

Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dict.pop.__doc__
'D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\nIf key is not found, d is returned if given, otherwise KeyError is raised'
>>> 

AIv ★★★★★
()
Ответ на: комментарий от anonymous
$ python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dict.pop?
  File "<stdin>", line 1
    dict.pop?
            ^
SyntaxError: invalid syntax
>>> 

ЧЯНТД?

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Ты опоздал :3

Ноздря в ноздрю пришли;-)

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Богу - богово, Кесарю - кесарево, шеллу - шеллово, а питону - питонье.

AIv ★★★★★
()

Первый вариант нравится больше, так как в нём, на мой взгляд, меньше мест, где можно допустить ошибку при возможных последующих корректировках кода.

justAmoment ★★★★★
()
Ответ на: комментарий от kernelpanic

Макс. ширина кода 80 символов, прописанная в ПЕП8, является рудиментом со времен перфокарт - там это ограничение было действительно актуальным и очень жестким. Сейчас я (и все мои коллеги читающие мой код) работают разворачивая редактор на весь экран, при этом ширина окна составляет более 130 символов. Почему я должен в угоду ПЕП8 отдавать чуть ли не половину монитора под пустое место? Не говоря уж о том, что ПЕП8 являет рекомендациями, отнюдь не обязательными к исполнению.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Что значит «всегда предпочтительней »?

$ python -m timeit -s "a = range(10)" "list(map(hex, a))"
100000 loops, best of 3: 12 usec per loop
100000 loops, best of 3: 12 usec per loop
100000 loops, best of 3: 12.1 usec per loop

$ python -m timeit -s "a = range(10)" "[hex(i) for i in a]"
100000 loops, best of 3: 10.3 usec per loop
100000 loops, best of 3: 10.3 usec per loop
100000 loops, best of 3: 10.3 usec per loop

anonymous
()
Ответ на: комментарий от AIv

Макс. ширина кода 80 символов, прописанная в ПЕП8…

79 же! И нужно это затем, что читать короткие строки проще. Ну и потом некоторые делят экран редактора пополам и открывают 2 файла одновременно.

fat_angel ★★★★★
()
Ответ на: комментарий от anonymous

list то зачем? map и так новый список ваяет.

$ python -m timeit -s "a = range(10)" "list(map(hex, a))"
100000 loops, best of 3: 5.36 usec per loop
$ python -m timeit -s "a = range(10)" "map(hex, a)"
100000 loops, best of 3: 4.39 usec per loop
$ python -m timeit -s "a = range(10)" "[hex(i) for i in a]"
100000 loops, best of 3: 5.47 usec per loop

AIv ★★★★★
()
Ответ на: комментарий от fat_angel

Кому проще? Лично мне эквипенисуально, мне интересно что бы как можно большая часть файла влезала на экран.

Если ты работаешь в какой нить мегаконторе со 100500 девелоперами, и ПЕП8 приянт как стандарт тогда да. А если тво код читаешь ты сам + 1.5 коллеги, то делать надо так как удобно самому, а не камлать на ПЕП8.

AIv ★★★★★
()
Ответ на: комментарий от lazyklimm

в 3-м deprecated же

Это проблемы тех, кто пишет на 3м.

гвидо ниасилил не любит же

Я слишком его уважаю за py2, что бы говорить о нем что то плохое за глаза и вслух;-) И великим свойственно ошибаться...

AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ну так работайте на нормальном языке;-)

$  python
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> map(hex, [1])
['0x1']
AIv ★★★★★
()
Последнее исправление: AIv (всего исправлений: 1)
Ответ на: комментарий от lazyklimm

Куда оно вынесено?

Python 3.3.0 (default, Feb 20 2013, 23:04:00) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.24)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> map(ord, 'abc')
<map object at 0x101349910>
>>> list(map(ord, 'abc'))
[97, 98, 99]

Python 3.2.3 (default, Sep 10 2012, 11:22:57) 
[GCC 4.7.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> list(map(ord, 'abc'))
[97, 98, 99]

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.