.1.0–.
->’.
%->.
help->’.
->”,use”.
In[1]:print(“,.”)
,.
In[2]:
除了基于文本的REPL,还提供了基于Web浏览器的,其使用方式和外观与或的非常相似。这些都是非常好的数据分析平台,且正在快速成为创建和分享信息的标准方式。强烈建议读者去了解一下。
虽然REPL很有用,但也有诸多缺点。首先是REPL在使用多行代码时比较难、繁琐且容易出错。其次是很难将代码保存到普通文件中。因此很难将在REPL环境中完成的工作分享给他人。
大部分人一般在文本文件中编写代码。如果对以.py结尾的文件运行解释器,会执行其中所有的代码,就如同在REPL中逐行执行一样。
例如有一个名为.py的文件,含有下面的内容:
print(“,what’!”)
print(“,”)
在bash中执行会得到下面的结果:
$.py
,what’!
,
在学会如何运行代码后,下面来学习语言本身。
1.2注释
所有现代编程语言都有注释字符。注释字符会让解释器忽略一部分字符,让开发者能够在相关代码附近撰写一些说明或解释。使用“#”字符表示注释内容。解释器会忽略掉#之后位于同一行的所有内容,没有多行注释:
#ent
=””
#
1.3变量
变量由两部分组成:名称和值。若想为一个名称给定一个值,需要用到单个等号(=)。将变量的名称放在等号的左边,值放在右边。变量的名字可由大小写字母、数字(0~9)、下划线()组成。下面是hbar变量,表示约化普朗克常数( ,即狄拉克常数):
h_bar=1.-34
变量名称不能以数字开头,此举是为了防止用户重新定义数值字面值。变量必须以字母或下划线开头。
记住,变量名称不能以数字开头!
= 42 # bad
= 42# good
定义完变量后,就可以随意使用或操作这个变量了。假设需要打印普郎克常数。首先定义π,接着用h_bar乘以2π:
pi=3.14159
h=2*pi*h_ba
(h)
在中,所有变量都有确定的类型,这意味着这些值具有明确定义的属性,用于指定其使用方式。各种类型有针对特定用途的专门属性。整数(int)和浮点数(float)用于数学计算;字符串(str)用于文本处理。这些都是字面类型,因为提供了专门的语法用于直接创建这些类型:
dims=3#int,
ndim=3.0
#float,
‘h_bar=1.-34
#float,’.’or’
e’
label=”(inMeV)”
#str,t
整数和字符串有时称为精确类型,因为所有精确类型的变量都能在底层精确表示。整数1就是1,不会是其他内容。但浮点数是不精确类型。
一般来说,浮点数是实数的64位近似值φ。有些浮点数(如1.0),可以用有限的数据表示,但其他浮点数可能不是精确值。这会让科学计算出现许多问题。更多信息请阅读David 的《What Every Know About – Point 》。
如果不清楚变量,可以使用内置的type()函数查看。使用这个函数时,将需要检查的变量放在括号中。
In[1]:type(h_bar)
Out[1]:float
In[2]:type(42)
Out[2]:int
Pothm中还可以使用类型名称来转换变量类型。首先输入类型名称,在其后跟上括号,括号里面是需要转换的变量。
In[1]:float(42)
Out[1]:42.0
In[2]:int(“28”)
Out[2]:28
在表达式int(“28”)中,字符串”28″转换成了整数,这是因为该字符串中的内容正好都是数字。如果字符串中的内容不能表示一个整数,则会转换失败,如下所示:
In[1]:int(“quark”)
()(1)
input-5->in()(2)
—->1int(“quark”)(3)
:():’quark’(4)
(1)这里产生一个错误()。
(2)错误的位置(指出是在文件中还是在交互式解释器中)。
(3)发生错误位置的行号,以及偏移量。
(4)最后是最重要的错误消息。请仔细阅读这条信息。如果错误信息不清晰或读不懂,可以在网上以错误信息作为关键字进行搜索。
这是标准的处理模式,能激发开发者的探索和创造能力。如果某个操作无法进行下去,那么代码应尽早报错并返回有用的错误消息。这种“早撞墙早回头”的信条是交互式开发过程的核心,能鼓励程序员不停地试验,针对错误调整代码再次尝试,重复这个过程直到代码收敛为工作版本。在前面的示例中,“quark”是个字符串,不是基数为10的数值。为了修改这个错误,最好将值更改为仅由数字组成的字符串。
是动态类型的,这意味着以下几点。
1.类型是关联到变量的值上,而不是关联到变量的名称上。
2.在使用某个变量之前,不需要知道该变量的类型。
3.改变变量的值后,变量名称的类型就随之改变。
下面的代码在中完全正确:
x=3
x=1.-34
x=”(inMeV)”
在这里,每次在向x赋予新值时,都改变了其类型。新值替换了旧值,但变量名称没有改变。这与静态类型语言,如C、C++、、Java都有所区别,在那些语言中:
1.类型关联到变量的名称上,而不是变量的值。
2.在使用变量之前必须指定其类型(通过声明或推导)。
3.无法改变变量类型,即使改变变量的值也不行。
本书不会对静态语言着墨过多,但重要的是要知道,中的许多语言特性是为了减少在使用低阶语言时会遇到的不便之处。变量的类型就是这样一个例子,对低阶语言中一些严格的限制进行了抽象。而的这种灵活性也伴随了一些折衷,在后续遇到时会一一介绍。
1.4特殊变量
有一些重要的特殊变量,这些变量的值已经内置到语言中,如True、False、None、。这些变量在启动解释器时就存在,且只初始化一次,因此都是单例模式。现在来深入了解这些特殊变量。
1.4.1布尔值
布尔类型只含有True和False这两个变量,在中类型为bool。布尔变量用来表示表达式的真假值。开发者也可以直接作为标志使用,表示开启或关闭某个行为。其他数据类型也可以转换为布尔值。一般来说,如果值是0或容器为空,转换为False;如果值非0或容器非空,则转换为True。下面是仅有的两个转换规则。
In[1]:bool(0)
Out[1]:False
In[2]:bool(“”)
Out[2]:True
1.4.2None不是0!
None在中是一个特殊的变量,用来表示没有给定值,或没有定义行为。这与使用0、空字符串或其他任何空值都不同。0是一个合法的数字,而None不是。如果在一个程序中需要一个整数或浮点数,但传进去的是None则程序会终止。如果传入的是0,程序会继续运行。None就如同C/C++的NULL、的null一样。另外,None在中还有特殊的地位,用来表示函数默认的返回值,后续章节会介绍更多相关内容。
1.4.不是None!
与None不同,变量不仅用来表示某个行为尚未定义,同时也表示该行为在中不可能完成、没有意义或不存在。例如,当试图用字符串除以浮点数时就会在底层遇到,导致:
In[1]:””/2.718
()
input-1->in()
—->1″”/2.718
:pe(s)for/:’str’and’float’
对自定义类型非常重要,后续会深入介绍。
学习完类型、变量、的特殊变量之后,接下来介绍能对变量做些什么。下一节介绍一些语言定义的行为和操作。
1.5操作符
操作符是一种语法,用于表示一些常见的处理数据和变量的方法。定义了一元(unary)、二元()和三元()这三种操作符,分别对应以1个、2个、3个变量作为参数的操作符。
表1-1显示了计算物理中需要了解的操作符。当然,每个操作符的重要程度并不相同。这里先介绍几个重要的,其他的会在用到的时候介绍。注意,有些操作符只能用于特定类型或变量。
表1-操作符(以变量x、y、z说明)
名称
使 用 方 式
返回值
一元操作符
正号
+x
用于数值类型,返回x
负号
-x
用于数值类型,返回-x
否定
not x
逻辑取反,True转换成False,反之亦然
位取反
~x
将x的二进制形式按位取反
删除
del x
删除变量x
调用
x()
返回调用x的结果
断言
x
检查bool(x)的值是否为True
二元操作符
赋值
x = y
将名称x的值设为y
访问属性
x.y
获取x中的值y
删除属性
del x.y
从x中移除y
索引
x[y]
获取x中位于y位置的值
删除索引
del x[y]
删除x中位于y位置的值
逻辑与
x and y
如果bool(x)和bool(y)都为True则返回True,反之返回False
逻辑或
x or y
如果bool(x)为True,则结果为x,反之为y
二元算术运算符
加法
x + y
和
减法
x – y
差
乘法
x * y
积
除法
x / y
商,在 2中只含有整数部分,在 3中还包括小数部分
地板除
x // y
求除法中的商
取模
x % y
求除法中的余数
指数
x ** y
x的y次方
按位与
x & y
逐位比较x和y的二进制形式,两者都为1,则该位为1,否则该位为0
按位或
x | y
逐位比较x和y的二进制形式,只要其中有一个是1,则该位为1,否则该位为0
按位异或
x ^ y
逐位比较x和y的二进制形式,其中有且只一个是1,则该位为1,否则该位为0
向左位移
x > y
将x的二进制形式向右移动y位。对于整数相当于x除以2y
原地操作
x op= y
op可以相当于上面所有的操作,op=相当于原地操作,意味着直接在x上进行操作,结果也直接应用到x上。例如x += 1是向x加1
二元比较运算符
等于
x == y
True或False
不等于
x != y
True或False
小于
x < y
True或False
小于等于
x y
True或False
大于等于
x >= y
True或False
包含
x in y
如果x是y中的一个元素则为True,反之为False
不包含
x not in y
如果x是y中的一个元素则为False,反之为True
等价性测试
x is y
如果x和y指向同一个底层值则为True,反之为False
非等价测试
x is not y
如果x和y指向同一个底层值则为False,反之为True
三元运算符
三元赋值
x = y = z
将x和y的值设为z
属性赋值
x.y = z
将x.y的值设为z
索引赋值
x[y] = z
将x中y位置的值设为z
三元比较
x < y < z
True或False,等价于(x < y) and (y < z),这里的、=
三元或
x if y else z
如果bool(y)为True,则结果为x,反之为z。等价于C/C++中的yx:z
表1-1中列出的大多数操作符都可以互相组合。也就是说操作符之间可以互相连接、嵌套、用括号规定运算顺序。这与组合数学运算符完全相同,如下所示:
(x
加入IP合伙人(站长加盟) | 全面包装你的品牌,搭建一个全自动交付的网赚资源独立站 | 晴天实测8个月运营已稳定月入3W+
限时特惠:本站每日持续更新海量内部创业教程,一年会员只需98元,全站资源免费无限制下载点击查看会员权益
站长微信: qtw123cn
