鱼C论坛

 找回密码
 立即注册

python学习小菜笔记——第三课(插曲之变量和字符串)

已有 1247 次阅读2014-8-7 12:09 |个人分类:Python学习

课堂笔记:
变量

变量名就像我们现实社会的名字,把一个值赋值给一个名字时,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,

正如我爱小甲鱼,

他那呱唧呱唧

呱唧呱唧

呱唧呱唧的声音,

总缠绕于我的脑海,

久久不肯散去……

这我们就需要使用到三重引号字符串



课后作业:

0. 以下哪个变量的命名不正确?为什么?

(A) MM_520  (B) _MM520_  (C) 520_MM  (D) _520_MM

       (C)变量名不能以数字开头
C)选项不正确,因为 Python 中的变量名不能以数字开头。

1. 在不上机的情况下,以下代码你能猜到屏幕会打印什么内容吗?
  1. >>>myteacher = '小甲鱼'
  2. >>>yourteacher = myteacher
  3. >>>yourteacher = '黑夜'
  4. >>>print(myteacher)
     小甲鱼
会打印:小甲鱼


2. 在不上机的情况下,以下代码你能猜到屏幕会打印什么内容吗?
  1. >>> myteacher = '小甲鱼'
  2. >>> yourteacher = myteacher
  3. >>> myteacher = '黑夜'
  4. >>> print(yourteacher)
     小甲鱼
会打印:小甲鱼

3. 在不上机的情况下,以下代码你能猜到屏幕会打印什么内容吗?
  1. >>>first = 520
  2. >>>second = '520'
  3. >>>first = second
  4. >>>print(first)
     520
会打印:520,注:这里没有单引号括起来,但是他是一个字符串,因为使用 print() 打印,所以不包含单引号。可以试试直接>>>first,它是一个字符串的。


4. 除了使用饭斜杠(\)进行字符转义,还有什么方法可以打印:Let's go! 这个字符串?
       “Let's go!”
  1. >>>"Let's go!"

5. 如果非要在原始字符串结尾输入反斜杠,可以如何灵活处理?
        r'C:\Windows'+'\\' 
>>>str = r'C:\Program Files\FishC\Good''\\'
  1. >>>str = r'C:\Program Files\FishC\Good''\\'

a="xuyong\\yong\\"

a=r"xuyong\quan" +"\\"


6. 在这一讲中,我们说变量的命名需要注意一些地方,但小甲鱼在举例的时候貌似却干了点儿“失误”的事儿,你能看得出小甲鱼例子中哪里有问题吗?
        貌似不能以“XXOO”命名,系统会报错,至于为什么暂时还不太清楚
        >>> XXOO='小甲鱼'
        >>> print(XXOO)
        SyntaxError: invalid character in identifier
在例子中小甲鱼起了个 str 名字的变量,但事实上我们发现,str 的颜色跟普通变量貌似不同?没错,str() 和 print() 都是内置函数,但 Python 貌似不介意我们对内置函数进行赋值操作,所以这点我们以后就要注意啦,否则可能会出现以下的 BUG:

动动手:

0. 还记得我们第一讲的动动手的题目吗?这一次要求使用变量,计算一年有多少秒?
提示:可以以 DaysPerYear(每年天数),HoursPerDay(每天小时数),MinutesPerHour(每小时分钟数),SecondsPerMinute(每分钟秒数)为变量名。
DayPerYear = 365
HoursPerDay = 60
MinutesPerHour = 60
SeconDsPerMinute = 60
print(DayPerYear* HoursPerDay*MinutesPerHour*SeconDsPerMinute)

  1. DaysPerYear = 365
  2. HoursPerDay = 24
  3. MinutesPerHour = 60
  4. SecondsPerMinute = 60
  5. result = DaysPerYear * HoursPerDay * MinutesPerHour * SecondsPerMinute
  6. print(result)

1. 关于最后提到的长字符串(三重引号字符串)其实在 Python3 还可以这么写,不妨试试,然后比较下哪种更方便?

  1. >>> string = (
  2. "我爱鱼C,"
  3. "正如我爱小甲鱼,"
  4. "他那呱唧呱唧的声音,"
  5. "总缠绕于我的脑海,"
  6. "久久不肯散去……")
复制代码



课后补充:


1.变量命名

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是动态类型语言。如 iValuenames_listdict_obj 等都是不好的命名。

实例变量:

_开头,其他和普通变量一样

_price   

_instance_var

私有实例变量(外部访问会报错):

__开头(2个下划线),其他和普通变量一样

__private_var

专有变量:

__开头,__结尾,一般为python的自有变量,不要以这种方式命名

__doc__

__class__

普通函数:

和普通变量一样:

get_name()

count_number()

ad_stat()

私有函数(外部访问会报错):

__开头(2个下划线),其他和普通函数一样

__get_name()

文件名:

全小写,可使用下划线

*注意*:混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

函数和方法的参数:

总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。

如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

常量:

常量名所有字母大写,由下划线连接各个单词如MAX_OVERFLOWTOTAL

异常

因为异常也是一个类,所以遵守类的命名规则。此外,如果异常实际上指代一个错误的话,应该使用“Error”做后缀。

缩写

命名应当尽量使用全拼写的单词,缩写的情况有如下两种:

1.常用的缩写,如XMLID等,在命名时也应只大写首字母,如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 *,将不导入所有以下划线开头的对象,包括包、模块、成员


2.字符串

除了数值, 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


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-16 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部