前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python系列(二)python变量赋

python系列(二)python变量赋

作者头像
py3study
发布2020-01-07 13:36:48
7670
发布2020-01-07 13:36:48
举报
文章被收录于专栏:python3python3

变量赋值

1、什么是变量?

变量就是存储了一个值(就是与变量相关联的信息),代表或引用某个值的一个命名。通常使用“变量=值”的方式给变量赋值。

2、命名规则

  • 变量名只能包括字母、数字和下划线。
  • 变量名可以使用字母或者下划线开头,但不能以数字开头。
  • 变量名不能包含空格,但可以使用下划线来分隔其中的单词。
  • 不能使用关键字作为变量名(即用上面的查询方法可以查询到   哪个是关键字,变量命名要避免使用关键字)
  • 不要使用函数名作为变量名
  • 变量名应该即简短又具有描述性
  • 慎用小写字母i和大写字母O,应该易被当做数字1和0
  • 建议不要使用大写字母,虽然可以用,但是大写字母不易识别

3、变量赋值在内存中的原理

例如:

wKioL1kJL8Og4HIuAAA7KHYjC3M855.jpg
wKioL1kJL8Og4HIuAAA7KHYjC3M855.jpg

Python解释器此时已经干了两件事。

第一件事:在内存中创建了一个“NB”的字符串;

第二件事:在内存中创建了一个名为dabiaoge的变量,并把它指向”NB”。

其实呢,也可以把dabiaoge变量赋值给另外一个变量pengfei,这其实上是把变量pengfei指向变量dabiaoge这个变量所指向的数据“NB”。如下所示:

wKioL1kJL8TyzTjRAACfNIuL1f4867.jpg
wKioL1kJL8TyzTjRAACfNIuL1f4867.jpg

接下来又一个问题,如果改变了dabiaoge变量的赋值,那么变量pengfei下的值是不是也跟着改变了呢,我们看一下:

wKiom1kJL8TRCJNGAACWxtQj4Ng488.jpg
wKiom1kJL8TRCJNGAACWxtQj4Ng488.jpg

上图所示,无论变量dabiaoge再怎么改变赋值,变量pengfei的赋值,永远不变。那怎么让变量pengfei也改变成dabiaoge的赋值呢?

wKioL1kJL8TCEgbkAACbu6iy5-E097.jpg
wKioL1kJL8TCEgbkAACbu6iy5-E097.jpg

答案从上图可以看出,就是重新把变量dabiaoge再赋予给变量pengfei一次就可以了。

上面的两个例子中内存到底干了什么了呢?

执行pengfei =dabiaoge,解释器创建了变量pengfei,并把pengfei指向dabiaoge指向的字符串”NB”;

执行dabiaoge=“dashen”,解释器创建了字符串“dashen”,并把dabiaoge的指向改为“dashen”,但pengfei并没有更改,依然指向的是“NB”

所以,最后打印pengfei的结果自然是NB了。

当再一次执行pengfei =dabiaoge,则内存重新把pengfei指向dabiaoge指向的新的字符串“dashen”,这样再次打印pengfei的结果自然就是dashen了。

4、输入与输出

1)输入(print)

wKiom1kJL8WxRIeMAABtuT4cncc414.jpg
wKiom1kJL8WxRIeMAABtuT4cncc414.jpg

如果输出多个字符,可以使用“,“隔开,print()会依次打印每个字符串,遇到逗号“,”会输出一个空格。(只在3.0版本中生效)。

wKioL1kJL8Xz4vDGAABx4v2vHsU172.jpg
wKioL1kJL8Xz4vDGAABx4v2vHsU172.jpg

注意:使用print时,在3.0版本中,必须使用括号(),将输出的内容扩起来,在2.7版本中不存在此问题,直接‘’输出内容即可。也可以使用()。

print()打印整数,或者计算结果:

wKiom1kJL8aTVCN2AAEdStAzvYg196.jpg
wKiom1kJL8aTVCN2AAEdStAzvYg196.jpg

2)输入(input或者raw_input)

wKiom1kJL8bzvT1QAADdynYqFEs226.jpg
wKiom1kJL8bzvT1QAADdynYqFEs226.jpg

说明:当你输入name =input()并按下回车后,Python交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后完成输入。

输入完成后,不会有任何提示,Python交互式命令行又回到>>>状态了。那我们刚才输入的内容到哪去了?答案是存放到name变量里了。可以直接输入name查看变量内容了。

可以直接执行name看到内容,还可以用print()函数:

wKioL1kJL8egb9_1AACiOehmeaY151.jpg
wKioL1kJL8egb9_1AACiOehmeaY151.jpg

5、常量

说明:常量就是不能变的变量,在习惯上通常使用大写的变量名表示常量。(常量是自定义的)

wKioL1kJL8fABn8mAADyY6K_Xks722.jpg
wKioL1kJL8fABn8mAADyY6K_Xks722.jpg

6、常用数据类型

1)整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

2)浮点数

浮点数也就是小数。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,而浮点数运算则可能会有四舍五入的误差。

3)布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

wKiom1kJL8iSfYELAACwrij_NIQ810.jpg
wKiom1kJL8iSfYELAACwrij_NIQ810.jpg

布尔值可以用and、or和not运算。

①and运算是与运算,只有所有都为True,and运算结果才是True:

wKiom1kJL8nz-NrXAAFbmun91OU741.jpg
wKiom1kJL8nz-NrXAAFbmun91OU741.jpg

②or运算是或运算,只要其中有一个为True,or运算结果就是True:

wKioL1kJL8mBvE-aAADnyElbr4I032.jpg
wKioL1kJL8mBvE-aAADnyElbr4I032.jpg

③not运算是非运算,它是一个单目运算符,把True变成False,False变成True:

wKioL1kJL8rg5UoRAADvBPyil-8150.jpg
wKioL1kJL8rg5UoRAADvBPyil-8150.jpg

布尔值经常用在条件判断中,比如:

wKiom1kJL8vDPJB_AADdYz9_aW8675.jpg
wKiom1kJL8vDPJB_AADdYz9_aW8675.jpg
wKioL1kJL8uDpVELAACeMsOTXls314.jpg
wKioL1kJL8uDpVELAACeMsOTXls314.jpg

4)空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型,我会在后续的博文发表中讲到。

wKiom1kJL8zgJXdCAACno5t5UnI660.jpg
wKiom1kJL8zgJXdCAACno5t5UnI660.jpg

7、字符串与字符串格式化

1)字符串

字符串是以单引号'或双引号"括起来的任意文本

如果字符串内部既包含'又包含"怎么办?

①如果字符串内容中包含‘单引号可以使用“”双引号,将内容包含

例:包含’单引号:

wKioL1kJL83ieXVAAAE_-S6Mdag016.jpg
wKioL1kJL83ieXVAAAE_-S6Mdag016.jpg

②如果字符串内容中包含“双引号可以使用’’’三个单引号或者’单引号,将内容包含

例:包含“双引号:

wKiom1kJL83ijGLcAAG53X4v25M990.jpg
wKiom1kJL83ijGLcAAG53X4v25M990.jpg

2)使用转义符

wKioL1kJL86T4upNAABY-iB5TCQ480.jpg
wKioL1kJL86T4upNAABY-iB5TCQ480.jpg

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\

如果字符串里面有很多字符都需要转义,就需要加很多\,这样很不方便查看,为了简化,Python还允许用r''表示''内部的字符串默认不转义:

wKiom1kJL86g7wjWAABjLZh-w6I580.jpg
wKiom1kJL86g7wjWAABjLZh-w6I580.jpg

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用 '''……''' 的格式表示多行内容:

wKiom1kJL8_QQEHKAADRWuuMz7Q787.jpg
wKiom1kJL8_QQEHKAADRWuuMz7Q787.jpg

3)字符格式化

%运算符就是用来格式化字符串的。

在字符串内部,

%s表示用字符串替换;

%d表示用整数替换。

有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。

常见的占位符有:

%d     整数

%f    浮点数

%s    字符串

%x    十六进制整数

例如:

wKioL1kJL8_xHcHKAACqSaefwT4245.jpg
wKioL1kJL8_xHcHKAACqSaefwT4245.jpg

注释:%s表示用最后%定义的world替换

wKiom1kJL9Cx7NnnAADteAu89Lg993.jpg
wKiom1kJL9Cx7NnnAADteAu89Lg993.jpg

4)格式化整数

格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

wKioL1kJL9DSZeS2AAGg3fnKu0s386.jpg
wKioL1kJL9DSZeS2AAGg3fnKu0s386.jpg

%3d:代表整数替换,具有三个占位符。不过后面定义的值中如果位数超过三个,还是会输出全部,只是表示未超出指定位数的表示。

  %3d:表示整数有3个占位符,如果某个占位符中没有值,是否补0,如1只有一个位数,所以在1前加了两个0表示。

5)格式化整数与小数的位数:

wKiom1kJL9HSZD_kAACFNxpBJFg926.jpg
wKiom1kJL9HSZD_kAACFNxpBJFg926.jpg

注意:.2f是取小数点后2位。

注:如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串:

wKioL1kJL9Lib245AAD_2gc8G-M848.jpg
wKioL1kJL9Lib245AAD_2gc8G-M848.jpg

字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%:

wKioL1kJL9OAGc-VAADNRDanNAQ206.jpg
wKioL1kJL9OAGc-VAADNRDanNAQ206.jpg

8、编码

首先要知道一个概念:

计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。

最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255=28(二进制11111111转换为十进制=255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是216,用65535表示,4个字节可以表示的最大整数是232用4294967295表示。

在ASCII编码中,65-90为26个大写英文字母,97-122为26个小写字母。

大写A的编码是65,小写字母z的编码为122。

是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

现在,捋一捋ASCII编码和Unicode编码的区别:

ASCII编码是1个字节,而Unicode编码通常是2个字节。

字母A用ASCII编码是十进制的65,二进制的01000001;

字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;

汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。

你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间:

UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

注意:如果在编写python脚本中,需要使用中文,必须指定编码:

Python2.x版本不支持中文,在写脚本时需要指定编码格式:

例如:

wKiom1kJL9PSYMSEAACwlZvT-YU855.jpg
wKiom1kJL9PSYMSEAACwlZvT-YU855.jpg

执行结果如下:

wKiom1kJL9Th6HsZAACDKHYOEHs185.jpg
wKiom1kJL9Th6HsZAACDKHYOEHs185.jpg

如果不指定这一行会怎么样呢,答案是会报错:

wKioL1kJL9SQ-zA7AAC04yJpWq4594.jpg
wKioL1kJL9SQ-zA7AAC04yJpWq4594.jpg

9、注释

①单行注释格式:

#注释内容

②多行注释格式:

‘’’注释内容’’’

10、Python算术运算符

假设a=15 b=200

wKiom1kJL9Wi_cldAAJW7RwYADE567.jpg
wKiom1kJL9Wi_cldAAJW7RwYADE567.jpg

+:加

-:减

*:乘

/:除

%:只取余数

**:幂次方

//:只取商,舍弃余数,如果被除数和除数是浮点数,则,取的商也是以浮点数形式显示,例如下面的例子:

wKioL1kJL_rD9illAABAQ-Qd7R8080.jpg
wKioL1kJL_rD9illAABAQ-Qd7R8080.jpg

11、python比较运算符

  ==:等于,一般用于比较两个对象是否相等

!=:不等于,比较两个对象是否不相等

  <>:不等于,和!=类似

  >:大于

  <:小于

  >=:大于等于

  <=:小于等于

比较运算符一般用在if语句中,比如下面的例子:

(下面的例子用的是python2.7版本)

wKiom1kJL_vR8d1lAAJdebmCpGg324.jpg
wKiom1kJL_vR8d1lAAJdebmCpGg324.jpg
wKioL1kJL_vjLg14AADUkW3l0Ug064.jpg
wKioL1kJL_vjLg14AADUkW3l0Ug064.jpg

注意1:在python3.0系列版本里面,取消了“<>”这个运算符,只保留了“!=”,大家使用的时候需要特别注意!

注意2: if要以:结尾,else也要以:结尾,这是和shell的区别。

12、python赋值运算符

=  简单的赋值运算符   c = a + b 将 a + b 的运算结果赋值为 c

  +=  加法赋值运算符 c += a 等效于 c = c + a

  -=   减法赋值运算符 c -= a 等效于 c = c - a

  *=  乘法赋值运算符 c *= a 等效于 c = c * a

  /=   除法赋值运算符 c /= a 等效于 c = c / a

  %= 取模赋值运算符 c %= a 等效于 c = c % a

  **= 幂赋值运算符    c **= a 等效于 c = c **a

  //= 取整除赋值运算符   c //= a 等效于 c = c // a

13、python位运算符

①&  按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 二进制解释:

设置变量a=5,b=3

二进制:

例:a = 0101

    b = 0011

   a&b=0001

wKiom1kJL_zxFhnkAABlcFzrero139.jpg
wKiom1kJL_zxFhnkAABlcFzrero139.jpg

②|  按位”或”运算符:只要对应的二个二进位有一个为1时,结果位就为1,二进制解释:

设置变量: a=5,b=3

二进制:

例:a=0101

b=0011

a|b=0111

wKioL1kJL_zx-MEaAABdlpY9zvo322.jpg
wKioL1kJL_zx-MEaAABdlpY9zvo322.jpg

③^ 按位异或运算符:当两对应的二进位相异时,(不相同时)结果为1,二进制解释:

设置变量: a=5,b=3

二进制:

例:a=5,b=3

    a=0101

b=0011

a^b=0101110

wKiom1kJL_zAvNE-AABh7M-5FJw424.jpg
wKiom1kJL_zAvNE-AABh7M-5FJw424.jpg

④~    按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1  二进制解释:  在一个有符号二进制数的补码形式。

公式是:~a   =-(a+1)

~a   =-(a+1)

wKioL1kJL_3QM8NgAABErcRVOws099.jpg
wKioL1kJL_3QM8NgAABErcRVOws099.jpg

⑤<<  左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,不够的位数补0。二进制解释:

设置变量:

  a=5

二进制表示:

  a=0101.

  a<<2 //向左移位,后面不够的补0

  a=01 0100

即a=20

wKioL1kJL_3zc8gQAABV4fTsrGo675.jpg
wKioL1kJL_3zc8gQAABV4fTsrGo675.jpg

⑥>>  右移动运算符:把">>"左边的“运算数”的各二进位全部“右移”若干位,">>"右边的数指定移动的位数 ,高位丢弃,二进制解释:

设置变量a=5

二进制表示:

   a=0101

2>>a=0001   ##去掉01   //向右移位,前面不够的补0,后面的丢掉

wKiom1kJL_2QKf5DAABDkZVMLWk623.jpg
wKiom1kJL_2QKf5DAABDkZVMLWk623.jpg

14、python逻辑运算符

①and :俩个值都相等时才满足条件,返回结果

wKioL1kJL_6Qw8pcAAE_nrX8AT4287.jpg
wKioL1kJL_6Qw8pcAAE_nrX8AT4287.jpg

②or:一个条件满足,就返回前面的结果

wKiom1kJL_6BVQSZAADu2S61rVA988.jpg
wKiom1kJL_6BVQSZAADu2S61rVA988.jpg

③not:非,取反的意思

wKioL1kJL_6TMeJ1AADeGx9-Tck947.jpg
wKioL1kJL_6TMeJ1AADeGx9-Tck947.jpg

15、python成员运算符

 in: 在指定的序列中找到值返回True

 not in :在指定的序列中没有找到值返回True

wKiom1kJL__hKrvrAAE-VwnrYxU003.jpg
wKiom1kJL__hKrvrAAE-VwnrYxU003.jpg

16、python身份运算符

is:比较两个标识符是不是引用来自一个对象

isnot :表交两个标识符是不是引用来自不同对象

wKioL1kJL_-ChSXvAAC3bPhILNg353.jpg
wKioL1kJL_-ChSXvAAC3bPhILNg353.jpg

17、python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符:

运算符     描述

** 指数 (最高优先级)

~+ -      按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)

*/ % //   乘,除,取模和取整除

+-    加法减法

>><<   右移,左移运算符

& 位 'AND'

^|     位运算符

<=< > >=  比较运算符

<>== !=    等于运算符

=%= /= //= -= += *= **=  赋值运算符

isis not  身份运算符

innot in  成员运算符

notor and  逻辑运算符

注1:这很像我们小学时候学习混合运算一样,口诀是:

有括号先算括号里面的,没括号的话就先算乘除后算加减。

注2:一般常用的就是[+,-,*,/],符合数学运算中的优先级,初此之外,**幂的优先级最高,运算符的优先级如上表示。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档