Улучшение читаемости и функциональности функции - PullRequest
3 голосов
/ 02 марта 2012

У меня есть следующее определение:

def heat( number ):

if number == "r":
    h = 12
elif number == "b":
    h = 24

return h

Тем не менее, я хотел бы, чтобы это выглядело лучше, и мне не пришлось отвечать на заявления if.Мне сказали, что я могу сделать это следующим образом (Я ХОЧУ сделать это таким образом, поэтому, если я могу получить помощь только на этом конкретном примере, пожалуйста):

def heat(number):
    m = { "r" : 12,
          "b" : 24 }
try:
    return m[number]
except KeyError:
    return 0.0

Я, однако, не понимаюкак это вернет значение для «ч», что я и хочу.Может ли кто-нибудь объяснить мне этот метод?Также я путаюсь между картами, словарями и т. Д. Заранее спасибо.

ОБНОВЛЕНИЕ

Хорошо, я получаю приведенный выше пример, но что, если у меня есть два входа вфункция?

например,

def heat( temp, coeff )

написать для возврата:

return m(heat, coeff) 

Или это не работает?

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

Вариант словаря можно написать немного более кратко:

def heat(number):
    return {'r':12,'b':24}.get(number,0.0)
1 голос
/ 02 марта 2012

карт и словарей

Вообще говоря, карт и словарей - это дваслова, которые означают одно и то же.Они взаимозаменяемо используются во многих литературах и многими людьми.

карты называются так, потому что это то, что они делают.Они представляют собой набор пар произвольных значений, сопоставленных друг с другом.Учитывая одно из значений в паре (то, которое известно как key ), другое (значение ) может быть получено относительно эффективно.Помимо простоты использования, для этой эффективной цели обычно используются карты .(В вашем примере и «r», и «b» являются клавишами , а 12 и 24 являются их соответствующими значениями .)

Строго говоря, стандартные данныеструктура, которая реализует это в Python, известна как dict (сокращение от dictionary ), и слово, которое они используют в документации для описания концепции, это mapping object. 1

Чтобы понять, как вы можете вернуть значение для 'h' , вам следует прочитать о том, как dicts используется потому что это то, что m.

0 голосов
/ 02 марта 2012

Вы также можете использовать одно утверждение (если у вас есть только эти ограниченные опции):

def heat(number):
    return 12 if number == "r" else (24 if number == "b" else 0.0)

Однако если вам нужно более 2 альтернатив, словарь, который вы предложили, будет лучше.

Вы также можете избежать исключения:

def heat(number):
    m = { "r" : 12,
          "b" : 24 }

    return m[number] if number in m else 0.0
...