|
变量名就像我们现实社会的名字,把一个值赋值给一个名字时,Ta会存储在内存中,称之为变量(variable)。
在大多数语言中,都把这种行为称为“给变量赋值”或“把值存储在变量中”。
不过Python与大多数其他计算机语言的做法稍有不同,Ta并不是把值存储在变量中,而更像是把名字贴在值的上边。
所以有些Python程序员会说“Python”没有“变量”,只有“名字”。
Python变量需要注意的地方
在使用变量之前,需要对其先赋值。
变量名可以包括字母、数字、下划线,但变量名不能以数字开头。
字母可以是大写或小写,但大小写是不同的。也就是说fishc和FishC对于Python来说是完全不同的两个名字
等号(=)是赋值的意思,左边是名字,右边是值,不可写反咯。
变量的命名理论可以取任何合法的名字,但作为一个优秀的程序员,请将尽量给变量取一个专业一点儿的名字:
>>>t =‘小甲鱼’
>>>xxoo =‘小甲鱼’
>>>teacher =‘小甲鱼’
字符串
到目前为止,我们所认知的字符串就是引号内的一切东西,我们也把字符串叫做文本,文本和数字是截然不同的,咱看例子:
>>>5+8
>>>’5’+’8’
要告诉Python你在创建一个字符串,就要在字符两边加上引号,可以是单引号或者双引号,Python女士表示不挑剔。
但必须成对,你不能一边单引号,另一边却花心的用上双引号结尾。
如果字符串中需要出现单引号或双引号怎么办?
例如我想打印字符串:Let’s go!
有两种方法,第一种比较常用,就是使用我们的转义符号(\)对字符串中的引号进行转义:
>>>‘Let\’s go!’
还有一种方法小甲鱼卖个关子,让大家先思考一下,在课后习题里边会有举例讲解。
原始字符串
好像反斜杠是一个好东西,但不妨试试打印:
>>>str = ‘C:\now’
我们可以用反斜杠对自身进行转义:
>>>str = ‘C:\\now’
但如果对于一个字符串中有很多个反斜杠:
>>>str = ‘C:\Program Files\Intel\WiFi\Help’
原始字符串的使用非常简单,只需要在字符串前边加一个英文字母r即可:
>>>str = r‘C:\now’
长字符串
如果希望得到一个跨越多行的字符串,例如:
我爱鱼C,
正如我爱小甲鱼,
他那呱唧呱唧
呱唧呱唧
呱唧呱唧的声音,
总缠绕于我的脑海,
久久不肯散去……
这我们就需要使用到三重引号字符串!
(A) MM_520 (B) _MM520_ (C) 520_MM (D) _520_MM
(C)变量名不能以数字开头a="xuyong\\yong\\"
a=r"xuyong\quan" +"\\"
python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范。于是总结了一些,供参考。
模块名:
模块应该使用尽可能短的、全小写命名,可以在模块命名时使用下划线以增强可读性。同样包的命名也应该是这样的,虽然其并不鼓励下划线。
主要是考虑模块名是与文件夹相对应的,因此需要考虑文件系统的一些命名规则的,比如Unix系统对大小写敏感,而过长的文件名会影响其在Windows\Mac\Dos等系统中的正常使用。
通常是小写字母,单词之间用_分割
ad_stats.py
包名:
和模块名一样
类名:
几乎毫无例外的,类名都使用首字母大写开头(Pascal命名风格)的规范。使用_单下划线开头的类名为内部使用,from M import *默认不被导入的情况。
单词首字母大写
AdStats
ConfigUtil
全局变量名(类变量,在java中相当于static变量):
大写字母,单词之间用_分割
NUMBER
COLOR_WRITE
对于from M import *导入语句,如果想阻止导入模块内的全局变量可以使用旧有的规范,在全局变量上加一个前导的下划线。
*注意*:应避免使用全局变量
普通变量:
小写字母,单词之间用_分割
this_is_a_var
*注意*:
1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
2.私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。
3.变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。
实例变量:
以_开头,其他和普通变量一样
_price
_instance_var
私有实例变量(外部访问会报错):
以__开头(2个下划线),其他和普通变量一样
__private_var
专有变量:
__开头,__结尾,一般为python的自有变量,不要以这种方式命名
__doc__
__class__
普通函数:
和普通变量一样:
get_name()
count_number()
ad_stat()
私有函数(外部访问会报错):
以__开头(2个下划线),其他和普通函数一样
__get_name()
文件名:
全小写,可使用下划线
*注意*:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。
函数和方法的参数:
总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。
如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。
常量:
常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOW,TOTAL。
异常
因为异常也是一个类,所以遵守类的命名规则。此外,如果异常实际上指代一个错误的话,应该使用“Error”做后缀。
缩写
命名应当尽量使用全拼写的单词,缩写的情况有如下两种:
1.常用的缩写,如XML、ID等,在命名时也应只大写首字母,如XmlParser。
2.命名中含有长单词,对某个单词进行缩写。这时应使用约定成俗的缩写方式。
例如:
function 缩写为 fn
text 缩写为 txt
object 缩写为 obj
count 缩写为 cnt
number 缩写为 num,等。
前导后缀下划线总结
一个前导下划线:表示非公有。
一个后缀下划线:避免关键字冲突。
两个前导下划线:当命名一个类属性引起名称冲突时使用。
两个前导和后缀下划线:“魔术”(有特殊用途)对象或者属性,例如__init__或者__file__。绝对不要创造这样的名字,而只是使用它们。
*注意*:关于下划线的使用存在一些争议。
Python 用下划线作为变量前缀和后缀指定特殊变量。
_xxx 不能用'from module import *'导入(相当于 private)
__xxx__ 系统定义名字
__xxx 类中的私有变量名(相当于protect)
核心风格:避免用下划线作为变量名的开始。
因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。"单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
"双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。
特定命名方式
主要是指 __xxx__ 形式的系统保留字命名法。项目中也可以使用这种命名,它的意义在于这种形式的变量是只读的,这种形式的类成员函数尽量不要重载。如
class Base(object):
def __init__(self, id, parent = None):
self.__id__ = id
self.__parent__ = parent
def __message__(self, msgid):
# …略
其中 __id__、__parent__ 和
__message__ 都采用了系统保留字命名法。
__双下划线开头双下划线结尾__:指那些包含在用户无法控制的命名空间中的“魔术”对象或属性,如类成员的__name__、__doc__、__init__、__import__、__file__、等。推荐永远不要将这样的命名方式应用于自己的变量或函数。
单下划线结尾_:只是为了避免与python关键字的命名冲突
_单下划线开头:弱“内部使用”标识,如:”from M import *”,将不导入所有以下划线开头的对象,包括包、模块、成员
除了数值, Python 还可以通过几种不同的方法操作字符串。字符串用单引号或双引号标识:
>>> 'spam eggs'
'spam eggs'
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"
>>> 'doesn"t'
'doesn"t'
>>> "doesn\'t"
"doesn't"
>>> "doesn\"t"
'doesn"t'
>>> "doesn\'t"
"doesn't"
>>> 'doesn\"t'
'doesn"t'
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
字符串可以通过几种方式分行。可以在行加反斜杠作为继续符,这表示下一行是当前行的逻辑沿续。
hello = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant."
print hello
注意换行用 \n 来表示;反斜杠后面的新行标识( newline ,缩写“ n ”)会转换为换行符,示例会按如下格式打印:
This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line is significant.
然而,如果我们创建一个“ raw ”行, \n 序列就不会转为换行,示例源码最后的反斜杠和换行符 n 都会做为字符串中的数据处理。如下所示:
hello = r"This is a rather long string containing\n\
several lines of text much as you would do in C."
print hello
会打印为:
This is a rather long string containing\n\
several lines of text much as you would do in C.
或者,字符串可以用一对三重引号 ””” 或 ''' 来标识。三重引号中的字符串在行尾不需要换行标记,所有的格式都会包括在字符串中。
print """
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
"""
得到下面的输出:
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
解释器打印出来的字符串与它们输入的形式完全相同:内部的引号,用反斜杠标识的引号和各种怪字符,都精确的显示出来。如果字符串中包含单引号,不包含双引号,可以用双引号引用它,反之可以用单引号。(后面介绍的 print 语句,可以用来写没有引号和反斜杠的字符串)。
字符串可以用 + 号联接(或者说粘合),也可以用 * 号循环。
>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
两个字符串值之间的联接是自动的,上例第一行可以写成“ word = 'Help' 'A' ”这种方式只对字符串值有效,任何字符串表达式都不适用这种方法。
>>> import string
>>> 'str' 'ing' # <- This is ok
'string'
>>> string.strip('str') + 'ing' # <- This is ok
'string'
>>> string.strip('str') 'ing' # <- This is invalid
File "<stdin>", line 1, in ?
string.strip('str') 'ing'
^
SyntaxError: invalid syntax
小黑屋|手机版|Archiver|鱼C工作室
( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)
GMT+8, 2026-3-16 06:23
Powered by Discuz! X3.4
© 2001-2023 Discuz! Team.