关于PEP8编码规范
使用过python的朋友们一定都知道,在python中,是不需要使用 ; 符号来区分行的,并且也很少使用 ( ) { } 来对代码块范围来进行定义,而是通过特定的代码缩进来进行区分,这就使得python相比java等语言来说,在编写风格上有了很高的自由度,但是高自由度对于程序猿本身是好事,但是对于程序猿之间的交流,却成了大难事。这时候,就有大佬站出来说了:“不行!我们要统一一种让所有人看起来都舒服的编码规范”,于是PEP8就应运而生。除了代码结构以外,我们也知道,在python中并没有类似于public、private、等这一类限制变量或方法的作用域的关键字,那么为了明确python中的方法和变量的作用域,python使用了下划线,也就是 “_” 符号来对这个问题进行处理,在PEP8中也有对其进行解释,话不多说,直接进入正题——python 前后\单双下划线的区别
前单下划线
首先我们先来了解在变量或方法前加了一个单下划线的含义,其是指该方法和变量是私有的,外部不应该对其进行直接调用,有点类似于java中的private,但是又有所不同,要说其不同点就在于,java中的private是强制要求外部无法访问,但是python中的前单下划线则是名义上要求外部不应该访问,当时非要访问也是可以的,这就好像一个是法律层面的问题,而另一个是道德层面上的问题。
前单下划线修饰的成员变量,又被称之为保护变量,其指的是应该只能够被类对象和子类对象内部才能够访问到这些变量,举个栗子
class TESTA():
def __init__(self):
# 单下划线变量
self._test = 10
# 单下划线方法
def _testfunction(self):
print "this is a _testfunction"
# 正确的调用单下划线变量的方式
def gettest(self):
return self._test
test = TESTA()
print test._test
print test.gettest()
test._testfunction()
输出结果
10
10
this is a _testfunction
可以看到,要强制去访问的话,还是可以访问到前单下划线修饰的方法和内容的,这里需要提示一点,那就是**单下划线修饰的方法,在引用该方法的时候,是不支持使用from module import * 的方法进行引用,而只能通过import module的方式引用该模块之后,再调用此方法。**举个栗子
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/2/2 10:25
# @Author : WellHold
# @File : my_module.py
# @Info:模拟module
def _testfunction1():
print "_testfunction1"
def testfunction1():
print "_testfunction1"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019年2月2日10:06:11
# @Author : WellHold
# @File : test.py
# @Info: python学习
from my_module import *
testfunction1()
_testfunction1()
输出结果
testfunction1
Traceback (most recent call last):
File "I:/pythonWorkspace/studypython/test.py", line 11, in <module>
_testfunction1()
NameError: name '_testfunction1' is not defined
Process finished with exit code