Python中下划线的主要作用
Python中下划线的主要作用
陈小超123 发表于3年前
Python中下划线的主要作用
  • 发表于 3年前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 本文描述在Python中下划线"_"的主要用处。

在Python中下划线只要有4个用处,分别是:

  1. 丢弃不必要的变量名

  2. 重命名另一个模块中的函数

  3. 使一个变量变成私有变量

  4. 保护父类中得方法不会被重写

一下是这4类用处的具体代码案列。

1.丢弃不必要的变量名

  如果我们需要简单地重复某个步骤,比如像下面这样

for i in range(5):
     # do something
     pass

  上面这段代码里面的变量i没有实际意义,我们就可以用"_"代替。

  再比如舍弃从数据库中查询出的不必要的字段

for field1, field2, _, field3 in cur.fetchall():
    # do something
    pass

当遇到一个变量你必须要定义,但是这个变量又没有实际用处的时候,都应该用"_"给此变量命名,表示这是一个被丢弃的变量,可以增加代码的可维护性。

2.重命名另一模块中得函数

假设module_a.py中有一个say_hello函数

def say_hello():
    print "hello"

在另外一个文件foo.py中我们可以这样写来调用say_hello函数

from module_a import say_hello as _
_()

这种严重破坏可读性,所有并不提倡。

这一点其实和上面一点本质上是一样的,都是把一个对象命名为_,所以如果这两种写法结合使用的话,_的含义就是以最后一个命名为准。

3.使一个变量变为私有变量

这里的_和Java里的private有一样的功能,如果一个变量或函数以__(两个_)开头,则表示这个变量或函数只能在此类或此模块中被访问。

class Foo():
    aaa = 5
    __bbb = 6

foo = Foo()
print foo.aaa
print foo.__bbb

5
Traceback (most recent call last):
  File "/Users/xxx/PycharmProjects/untitled/b.py", line 10, in <module>
    print foo.__bbb
AttributeError: Foo instance has no attribute '__bbb'
Process finished with exit code 1

4.保护父类中得方法不被重写

class A():
    def __say_hello(self):
        print "hello from A"

class B(A):
    def __say_hello(self):
        print "hello from B"

a = A()
b = B()
print dir(a), dir(b)
print b._A__say_hello(), b._B__say_hello()


/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/xxx/PycharmProjects/untitled/b.py
['_A__say_hello', '__doc__', '__module__'] ['_A__say_hello', '_B__say_hello', '__doc__', '__module__']
hello from A
None hello from B
None
Process finished with exit code 0

从上面的例子中可以看出子类B没有重写父类A中的__say_hello()方法是因为类中以__开头的方法会被Python自动替换为_[class_name][method_name]的形式,在外部不能用方法名直接调用这些方法,相当于类中的私有方法。


共有 人打赏支持
粉丝 0
博文 2
码字总数 1170
×
陈小超123
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: