Discuss / Python / 请教大神这里为什么不是 base = 2?

请教大神这里为什么不是 base = 2?

Topic source

philaradox

#1 Created at ... [Delete] [Delete and Lock User]
def int2(x, base=2):
    return int(x, base)

return的时候,为什么不是 return int(x,base=2) 呢?

在int2(x, base=2)中其实相当于把base的值指定为一个默认参数,所以你在调用的时候只用写 int2('10001') 相当于 int('10001', base=2) return的时候base这部分被视为一个**kw参数传入进去 可以这么理解,如果你在return部分指定了base的值,如 return int(x,base=2) 那么你外围的int2调用的时候base无论传入什么样的值都返回的都会是以base=2为基础,这相当于让函数失去了通用性,当你想要调用一些八进制十进制转换的时候,你还是需要再写那么一个函数来适用于不同的进制版本。

事实上教程里面已经声明了,写这个函数是在经常需要转换二进制字符串的环境下,为了提高效率不用每次都显示调用 int(x, base=2) 相当于是一种针对生产情况所做的函数调用简化,但是这个函数还保留了一定的灵活性,让调用的时候不一定必须以二进制数来调用,你还可以显示声明base的值如 int2(x,base=8) 这个时候变为了以8进制为基础的情况了,在这里的话其实和调用了 int(x, base=8) 是相同的了 所以说白了这里是相当于把int函数中默认的base=10给替换成了base=2去了

base在def int2(x, base=2)时候已经传入了啊,默认就是2,2传入下面了。

如果返回int(x, base = 2)的话,你用int2(123, 10)的时候就不会返回十进制的123了,而是返回了123的二进制数。int2还是可以更改到别的base的。

De_Blois

#5 Created at ... [Delete] [Delete and Lock User]

这里无视base关键字,改成别的arg name都是一样的。 相当于return int(x, 2).

天然黑w

#6 Created at ... [Delete] [Delete and Lock User]

这样写可以么 ?

def int2(x):
    return int(x,2)

kkneedTime

#7 Created at ... [Delete] [Delete and Lock User]

感觉这样写比较好理解

`def int2(x): return int(x,base=2)

print(int2('1100')

```

前面有人说了,这里不宜'return int(x,base=2)',主要的原因是,这样失去了灵活性,每次调用int2,都只是int2(x,base=2),也就是int(x,base=2)。'int2'不可再转化其他进制。

曹伟_NaCl

#9 Created at ... [Delete] [Delete and Lock User]

因为这样写符合代码规范,如果你要写成

def int2(x, base=2):
    return int(x, base=2)

相同的,肯定是简单的好一点。

梦炸

#10 Created at ... [Delete] [Delete and Lock User]

因为int(‘01000111’,base=2)和int(‘01000111’,2)是等价的,见上面的

>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565

  • 1
  • 2

Reply