热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简明Python3教程6.基础

你肯定不满足于只打印HelloWorld吧?你想要的更多-你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能。

你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.
我们可以使用python中的常量和变量实现这些功能。

 

字面常量(literal constant)
字面常量的一个例子是数字诸如5, 1.23, 9.25e-3或字符串This is a string', "It's a string!".
顾名思义,字面常量的重点在于"字面", 你直接以字面的意义使用它们。数字2永远是数字2绝不会是别的东西。
而常量代表它们永远不会被改变,因此它们全被称为字面常量


数字
python3拥有3种数字类型 - 整数,浮点和复数(注: python3的整数类型已经被统一了,再没有短整数和长整数的分别)
•  例如,2是一个整数.
•  浮点数的例子如3.23, 52.3E-4. E代表10的幂,在这里52.3E-4等于52.3 * 10-4
•  -5+4j, 2.3 - 4.6j属于复数

编程老鸟请注意
python3没有"long int"类型,事实上python的整数可以任意大(注: 只是理论上的,再咋地存储器也不是无限的)

 

字符串
字符串是一个字符序列,经常用来表示字词. 字词可以是英语也可以是Unicode标准支持下的任何语言.
而unicode支持世界上绝大多数语言(http://www.unicode.org/faq/basic_q.html#16).

编程老鸟请注意
在python3中不存在纯ASCII字符串,因为Unicode是ASCII的父集。
如果你真的需要一个纯ASCII字符串,则需调用字符串.encode("ascii")方法.
详见StackOverflow中的相关讨论
(http://stackoverflow.com/questions/175240/how-do-i-convert-a-files-format-from-unicode-to-ascii-using-python#175270).
(注: 没必要看了过时了,调用encode后产生一个bytes对象,它不是字符串对象,python3中的所有字符串都是unicode)
我几乎可以保证在你编写的每个程序中都会用到字符串,下面将教你如何使用字符串,你要特别留心点阿.

单引号
你可以将字符串放到单引号中,所有空白字符即空格和tab都回原封保留。

双引号
双引号和单引号的效果完全相同。

三引号
在指定多行字符串的时候可以利用三引号 - ("""'''), 在三引号中还能自由的使用单引号和双引号. 一个例子:
     '''This is a multi
     This is the second
     "What's your name?
     He said "Bond, Jam
     '''
转义字符
假设你想要一个带单引号(')的字符串,你会怎么写呢?例如What's your name?,
你不能写成'What's your name?', 因为python会搞不清字符串是从哪开始又是从哪结束.
所以你需要告诉python字符串中间的单引号并不是字符串的结束标志。利用转义字符可以做到这点.
将单引号替换成 /' - 注意反斜杠,这样字符串就变成'What/'s your name?'了.
另一个办法是使用双引号"What's your name?",

不过当你需要双引号的时候和单引号的情况类似,必须加上反斜杠 /", 而反斜杠也一样必须表示成//
如果你需要一个双行字符串呢? 一个办法是使用前面提到的三引号或者使用换行的转义字符/n开始新的一行,
还有一个有用的转义字符/t表示tab, 转义字符太多了我只说了常用的.
另一个值得注意的地方是在一个字符串末尾的反斜杠表示这个字符串将被合并到下一行, 例如:
     "This is the first sentence./
     This is the second sentence."

上面的字符串等价于"This is the first sentence. This is the second sentence.".

原始字符串
如果你不希望python对字符串进行特别处理, 比如取消转义字符, 可以为字符串加上前缀r或R.
例如r"Newlines are indicated by /n".

字符串是不可变类型
这意味着创建一个字符串对象后就无法改变它了. 这听起来很糟糕, 其实非也, 后面见分解.

字面字符串连接 
如果你将两个字面字符串相邻, 它们会被python自动合并到一起.
例如'What/'s ' 'your name?'会变为"What's your name?"
C++程序员请注意
python没有单独的字符类型, 也没这个必要我保证你不会为此烦恼.
Perl/PHP程序员请注意
单引号和双引号字符串完全相同, 没有任何区别
正则表达式用户请注意
永远使用原始字符串编写正则表达式, 否则会需要大量的反斜杠, 例如反向引用可以表示为'//1'r'/1'.

字符串的format方法
有时我们需要使用额外信息构造字符串, 这时format就很有用了.
     #!/usr/bin/python
     # Filename: str_format.py
     age = 25
     name = 'Swaroop'
     print('{0} is {1} years old'.format(name, age))
     print('Why is {0} playing with that python?'.format(name))
输出:
     $ python str_format.py
     Swaroop is 25 years old
     Why is Swaroop playing with that python?

format如何工作?
一个string可以含有某些格式说明符, 随后调用的format将用你提供给它的参数替换对应的格式说明符.
观察上面的例子, {0}对应变量name它也是format的第1个参数. 与之类似{1}对应format的第2个参数age.
注意我们也可以使用字符串连接达到同样的目的: name + ' is ' + str(age) + ' years old'.
但是这种方式太乱啊, 很容易出错. 而且需要手动将变量转换为字符串而format可以为我们代劳.
最后, 使用format我们可以改变最终生成的字符串而不必修改传给format的变量, 反之一样.
format的本质就是将其参数替换到字符串中的格式说明符, 下面是一些更复杂的使用方式:
     >>> '{0:.3}'.format(1/3) #小数点后保留3位
     '0.333'
     >>> '{0:_^11}'.format('hello') #以下划线填充字符串到11位长, hello中间对齐
     '___hello___'
     >>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python') 
     # 关键字格式化
     'Swaroop wrote A Byte of Python'

关于格式说明符的具体信息见Python增强提议No.3101(http://www.python.org/dev/peps/pep-3101/).


变量
只使用字面常量很快就会感到无聊 - 我们需要某种方式存储并操作任何信息,变量就是其主要手段。
正如其名 - 变量的值可以变化,即可以用它们存储任何数据。
变量实际上只是计算机存储器的一部分,用于存储你给出的信息。
与字面常量不同,你需要访问这些变量,因此需要你给它们起名字。

 

标识符命名
变量是标识符的一个例子,而标识符用于标识某些东西的名字。下面是一些命名标识符识必须遵守的规则:
•  标识符的第一个字符必须是字母(包括大小写ASCII字母或unicode字符)或下划线('_')(注: 没错,用中文试试哈)
•  后面的字符可以由字母(大小写ASCII字母或unicode字符),下划线('_')和数字组成.
•  标识符是大小写敏感的,例如mynamemyName是不同的,前者小写后者大写.
•  一些合法标识符的例子i, __my_name, name_23, a1b2_c3,
   resumé_count.(注: 不知道乱码还是某国语言...)
•  非法标识符的例子, 2things, my-name, "this_is_inquotes"

 

数据类型
变量能容纳不同类型的值,被称为数据类型. 基本数据类型包括我们刚才讨论过的数字和字符串.
在后面的章节中我们将看到如何利用类创建我们自己的数据类型。

 

对象
记住,在python中一切皆对象,因此从广义上我们不说"某物"而说"某对象"

面向对象编程用户请注意
python是很彻底的面向对象语言,它的一切包括数字,字符串和函数全是对象。

 

如何编写python程序
     从现在开始,保存和运行一个python程序的过程如下:
     1. 打开你钟爱的编辑器.
     2. 输入本书的范例代码.
     3. 用源文件注释中给出的名字保存文件。并且我遵循惯例为python文件加上py后缀名.
     4. 以命令python program.py启动解释器执行程序或者使用IDLE. 当然你也可以使用前文介绍过的执行方法。

 

范例: 使用变量和字面常量
     # Filename : var.py
     i = 5
     print(i)
     i = i + 1
     print(i)
     s = '''This is a multi-line string
     This is the second line.'''
     print(s)
     #输出:
         $ python var.py
         5
         6
         This is a multi-line stri
         This is the second line.

范例工作流程:
首先,我们使用赋值运算符(=)为变量i赋值字面常量5,这行被称做一条语句,因为它表示需要完成某种操作,
这里是为变量名i绑定数值5. 接下来我们使用print语句打印i的值.

(注: py2k中print是条语句,说成"print语句"可以接受,但py3k中print是个地道的函数,因此说"调用print函数"更为恰当)
然后我们为i的值加1并存回i, 当打印它的值时得到意料中的6
与之类似,我们又为变量S赋值字面字符串然后打印它。

静态语言程序员请注意
变量被赋值后即可使用,这里无需变量声明或数据类型定义.

 

逻辑行和物理行
你所看到的代码中的行即为物理行,而python将一条语言当作一个逻辑行。
python假设一个物理行对应一个逻辑行。
逻辑行的例子是形如print('Hello World')的单条语句,如果它独占一行(就象你在编辑器看到的),那么它也是一个物理行.
python本身鼓励每条语句占一行,这样可读性更强。
如果你希望在一个物理行包含多个逻辑行,则必须使用分号(;)显式一个逻辑行/语句的结束. 例,
     i = 5
     print(i)

与下面的等效
     i = 5;
     print(i);
这样写的效果也一样
     i = 5; print(i);
甚至可以这样写
     i = 5; print(i)
虽然有多种写法,但我强烈建议你一个物理行只包含一个逻辑行. 不过当逻辑行太长,也可以把它写成多个物理行。
这些办法都是为了尽可能避免分号,使得代码的可读性更强。事实上我从不使用甚至都没在python程序中看到过分号。
下面是一个将逻辑行扩展为多个物理行的例子,它被称做显式行合并(explicit line joining)
     s = 'This is a string. /
     This continues the string.'
     print(s)

相应的输出为:
     This is a string. This continues the string.
与之类似的,

     print
     /(i)

相当于
     print(i)
另外某些情况下会导致隐式行合并(implicit line joining),比如逻辑行使用了大中小括号,此时无需反斜杠。
在后面的章节我们会使用列表编写程序,届时你会看到这种用法。

 

缩进
在python中空白字符是非常重要的,更具体的说是每行开头的空白字符十分重要。这被称作缩进
逻辑行开头的空白字符(空格和tab)用于确定逻辑行的缩进级别,依此按顺序将语句分组。
也就是说同组的语句必须拥有相同的缩进级别,而这些语句组被称作。下一章我们会看到块的重要性。
现在你需要牢记的是错误的缩进会导致程序出错, 举个例子:
     i = 5
      print('Value is ', i) #错误! 注意本行的开头多了一个空格.
     print('I repeat, the value is ', i)

运行上面代码会得到下面的错误信息:
     File "whitespace.py", line 4
     print('Value is ', i) # Error! Notice a single space at the start of the line
        ^
     IndentationError: unexpected indent

你可能注意到了程序的第2行的开头多了一个空格. 错误信息告诉我们程序的语法是非法的, 即程序的编写有问题.
这也意味着你不能随便开始新的语句块(除了主块, 我们一直在主快内编写). 那么要如何开始新的块呢? 后面的章节会有详解, 比如控制流.

如何缩进
不要混用空格和tab, 否则在不同的平台可能无法正常工作.
我强烈建议你使用tab或4个空格进行缩进, 谨记两者则其一然后一直用下去.

静态语言程序员请注意
python总是使用缩紧表达语句块, 这里没有括号啥事. 运行代码Run from __future__ import braces了解更多
(注: 表运行了, 过时了无视吧, 不过前句话没过时啊!)

 

小结
本章涉及到很多核心知识, 下面会接触到更有趣的东东, 比如控制流语句.
在此之前请确定你已经对本章的内容有足够的理解了.


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
author-avatar
mobiledu2502906557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有