Вычислять выражение как плавающее в Python

#python

#python

Вопрос:

Я хочу написать функцию, которая вводит две переменные a, b и которая возвращает a / b как значение с плавающей запятой независимо от типов a и b. Прямо сейчас я делаю это как:

 def f(a, b):
    return float(a)/float(b)
  

Есть ли лучший способ сделать это?

Комментарии:

1. Нужно ли вам поддерживать возможность того, что a и / или b могут быть строками или просто float и / или int ?

2. @Foon Я предполагаю, что a, b всегда являются числами

3. Вам нужен только один операнд, чтобы быть float , поэтому float(a) / b и a / float(b) оба будут действительными.

Ответ №1:

Предполагая, что вы используете Python2, поместите это в начало файла

 from __future__ import division
  

теперь / всегда будет выдавать значение с плавающей точкой. Используйте // для старого поведения.

Если вы используете Python3, то это уже поведение по умолчанию /

Ответ №2:

Вы могли бы просто принудительно преобразовать один из операндов в тип float, например:

 def f(a, b):
    return (a*1.0)/b
  

Комментарии:

1. float(a) / b было бы так же хорошо и должно быть более эффективным.

Ответ №3:

Это зависит. 😉

Самый безопасный способ — сделать то, что у вас есть, что будет работать для каждого числового типа, который может быть преобразован в a float . Некоторые числовые типы, такие как Fraction в Python 3, все равно будут возвращать a Fraction даже с новым разделением (которое влияет только int на s — другие типы определяют / сами), но ваш код правильно превратит Fraction s в floats .