设为首页 收藏本站
查看: 1134|回复: 0

[经验分享] Python学习笔记整理(九)Python赋值表达式和打印

[复制链接]

尚未签到

发表于 2018-8-5 07:53:23 | 显示全部楼层 |阅读模式
  赋值语句,表达式语句,打印
  一、赋值语句
  赋值语句给对象命名,基本形式是在等号左边写赋值语句的目标,右边写赋值的对象。左边可以是变量名或对象元素,而右侧的对象可以是任何会计算得到的对象表达式 。
  1、赋值语句的特性
  * 赋值语句建立对象引用值。建立变量到对象的应用。
  * 变量名在首次赋值时会被创建。
  当这个变量名出现在表达式中,就会被其所引用值取代
  *变量名在引用前必须先赋值。也就是必须建立变量名到对象的引用关系。
  * 隐式赋值语句
  import、from、del、class、for、函数参数。等模块导入,函数和类的定义,for循环变量以及函数参数都是隐式赋值运算。
  2、赋值语句的形式
  运算                    解释
  diege='diege'   基本形式
  diege,lily='yum','wang' 元组赋值运算(位置性)
  [diege,lily]=['yum','YUM'] 列表赋值运算(位置性)
  a,b,c,d='dieg'
  序列赋值运算,通用性 #MS不行,数量要一致。
  name=uname='diege' 多目标赋值运算
  diege += 43 增强赋值运算(相当于diege=diege+43)
  * 元组及列表分解赋值
  第二,第三种形式是相关的,当在“=”左边编写元组或列表时,Python会按照位置把右边对象和左边的目标从左到右相配对。
  * 序列赋值语句
  在新的Python版本,元组和列表赋值语句已统一为现在所谓的序列赋值语句的实例。--任何变量名的需里都可以赋值给任何值的序列。而Python会按位置一次赋值一个元素。如第四行。把变量名的元组和字符串的字符对应起来。
  *多重目标赋值
  如第五行,赋值相同对象给右边所有目标。
  *增强赋值语句
  以简洁的方式结合表达式和赋值语句的简写形式 。增强形式输入比较少,运行更快。在Python中,每个二元表达式运算符的都有增强赋值语句。
  3、序列赋值
  1)、基本
  >>> nudge=1
  >>> wink=2
  >>> A,B=nudge,wink
  >>> A,B
  (1, 2)
  >>> [C,D]=[nudge,wink]
  >>> C,D
  (1, 2)
  右侧可以是任何类型的序列,包括变量。只要长度相等即可
  2)、高级序列赋值语句模式
  注意:虽然可以在“=”符号两侧混合和匹配序列类型,右边元素的数目还是要左边的变量的数目相同,不然会产生错误。
  想要更通用的话,就需要使用分片了
  >>> string='diege'
  >>> a,b,c=string[0],string[1],string[2]
  >>> a,b,c
  ('d', 'i', 'e')
  >>> a,b,c=list(string[:2])+[string[2:]]
  >>> a,b,c
  ('d', 'i', 'ege')
  可以赋值嵌套序列
  >>> ((a,b),c)=('DI','GE')
  >>> a,b,c
  ('D', 'I', 'GE')
  4、多目标赋值语句
  >>> a=b=c=d='diege'
  >>> a,b,c,d
  ('diege', 'diege', 'diege', 'diege')
  多目标赋值以及共享引用
  上面一个对象,四个变量共享(全指向内存同一对象),这种对于不可能变的类型而言没有问题,如果是可变的类型就需要小心。
  5、增强赋值语句
  x+=y x-=y x*=y x/=y x&=y x|=y x^=y x%=y x>>=y  x<<=y x**=y x//=y
  增强赋值以及共享引用
  >>> L=[1,2]
  >>> M=L
  >>> L=L+[3,4] #指向新的对象
  >>> M,L
  ([1, 2], [1, 2, 3, 4])
  >>> L=[1,2]
  >>> M=L
  >>> L+=[3,4] #修改了原来的对象
  >>> M,L
  ([1, 2, 3, 4], [1, 2, 3, 4])
  这只对列表和字典这类可变对象才重要,而且相当罕见的情况。如果你需要打破共享引用值的结构,就要对可便对象进行拷贝。
  二、变量命名规则
  语句:(下划线或者字母)+(任意数目的字母,数字或下划线)
  注意:
  区分大小写,DIEGE和diege不同。Python程序区分大小写
  1、禁止使用保留字
  2、命令习惯
  * 以单一下划线开头的变量名(_X)不会被from module import *语句导入的。
  * 前后有下划线的变量名(__X__)是系统定义的变量名,对解释器有特殊意义。
  * 以两个下划线开头,但结尾没有两个下划线的变量名(__X)是类本地(压缩)变量。
  * 通过交互模式运行时,只有单个下划线变量(_)会保存最后的表达式结果。
  3、变量名没有类型,但对象有
  三、表达式语句
  1、表达式语句介绍
  在Python中可以使用表达式作为语句 (本身只占一行)。但是,因为表达式结果不会被存储,只有当表达式工作并作为附加的效果,这样才有意义。通常在两种情况下表达式用语句。
  *调用函数和方法
  有些函数和方法会做很多工作,而不会返回值,这种函数在其他语言中有时称为流程。因为他们不会返回你可能想保留的值,所以你可以用表达式语句调用这些函数。
  *在交互模式提示符下打印值
  Python会在交互模式命令行中响应输入的表达式的结果,从技术上讲,这些也是表达式语句,作为输入print语句的简写方法。
  常见的python表达式语句
  运算                解释
  spam(eggs,ham) 函数调用
  spam.ham(eggs)  方法调用
  spam                在交互模式解释器内打印变量
  spam < ham and ham != eggs 符合表达式
  spam < ham < eggs 范围表达式
  注意:虽然表达式在python中可以作为语句出现,但语句不能作为表达式。例如python不让你把赋值语句(=)嵌入其他表达式中。这样做的理由是为了避免常见的编码错误。当用“==”做相等测试时,不会打成“=”而意外改变量的值。
  2、表达式语句和在原处修改
  >>> L=[1,2]
  >>> L.append(3)
  >>> L
  [1, 2, 3]
  注意不要写成来L=L.append(3)
  赋值语句
  对列表调用append,sort,reverse这类在原处修改的元算,一定是对列表在原处的修改,但这些方法在列表修改后并不会把列表返回。
  四、打印语句
  1、打印语句
  print语句可以实现打印—只是对程序员友好的标准输出流的接口而已。技术上讲,这是把对象转换为其他文本表达式形式,然后发送给标准输出。
  标准输出流与C语言的stdout类似,通常对应到启动Python程序所在的窗口(除非shell上重定向到了文件或管道中)
  print 语句形式
  运算                解释
  print 'diege,test'
  把对象打印至sys.stdout,在元素之间增加一个空格,以及在末尾增加换行符。
  print 'diege,test'
  一样,但是在文本末尾没有加换行符字符。
  >>> myfile=open('/tmp/pydata','w')
  >>> print >> myfile, &quot;diege,test&quot;
  把文件传给myfile.write,而不是sys.stdout.write
  注意:print的内容是字符串一定要用引号扩起来。
  可是使用字符串合并和格式化工具,自己创建输出的的字符串,之后再一次打印出字符串。
  >>> x='hello'
  >>> y='world'
  >>> print '%s,%s' % (x,y)
  hello,world
  2、重定向输出流
  print x
  等价于
  import sys
  sys.stdout.write(str(x)+'\n')
  可以把sys.stdout重新赋值给标准输出流意外的的东西,这种等效的方式提供了一种方法,可以让print语句将文字传送到其他地方。
  >>> import sys
  >>> sys.stdout=open('/tmp/python.log','a',0)
  >>> x,y,z=1,2,3
  >>> print x,y,x
  >>> print x,y,z
  $ tail -f /tmp/python.log
  事实上可以将sys.stdout重设为非文件的对象。只要该对象有预期的协议(write方法)。当该对象是类时,打印的文字可以定位并通过任意方式进行处理。
  不过,为了基于print的程序重定向,sys.stdout重设提供了修改每个print语句以外的便利方式。或者使用系统shell重定向语法。
  上面有一个问题,打印到文件后需要切换回来。不然所有的print输出都打印到文件来了
  >>> import sys
  >>> temp=sys.stdout
  >>> sys.stdout=open('log.txt','a')
  >>> print 'diege'
  >>> print 1,2,3
  >>> sys.stdout.close()
  >>> print 1,2,3
  Traceback (most recent call last):
  File &quot;<stdin>&quot;, line 1, in <module>
  ValueError: I/O operation on closed file
  >>> sys.stdout=temp
  >>> print 1,2,3
  1 2 3
  网络上有一个比较好的范例说明
  http://www.cnblogs.com/MikeZhang/archive/2012/01/19/ioRedirect.html
  这样的方式太麻烦。因此增加了print的扩展功能,从而没有必要非得这么做
  当print 语句以>>开始,后面再跟着输出的文件对象(或其他对象)时,该print语句可以将文字传给该对象的write方法,但是不用重设sys.stdout。因为这种重定向是暂时的。普通的print语句还是会继续打印到原始的输出流的。
  >>> log=open('log.txt','a',0)
  >>> x,y,z=10,11,12
  >>> print >> log,x,y,z
  >>> diege='diege test'
  >>> print >> log,diege
  >>> print 123
  123
  >>> log.close()
  >>> print 123
  123
  如果需要在同一个程序中打印到文件以及标准输出流。print的>>形式就很方便,然而,如果你使用这种形式,需要提供一个文件对象(或者和文件对象一样有write方法的对象),而不是文件名字符串。
  这种print的扩展形式通常也用于把错误信息打印到标准错误流sys.stderr.可以使用文件write的方法愿意及自动设置输出的格式,或者重定向语法打印:
  >>> import sys
  >>> sys.stderr.write(('Bad!'*8)+'\n')
  Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!
  >>> print >> sys.stderr,'Bad!'*8
  Bad!Bad!Bad!Bad!Bad!Bad!Bad!Bad!
  在ptyhon3.0中 ,print语句将变为内置函数,功能相同,但语法稍有不同。目标文件和列结尾行行为是由关键词参数赋值的。例如,语句 print x,y会调用print(x,y),而print >> f,x会变成print (x,file-f,end='').

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546732-1-1.html 上篇帖子: python使用元组、字典向函数传递多个参数、python冗余参数处理 下篇帖子: 详解python解释器安装以及简单的python入门第一步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表