不积跬步无以至千里

补充上一节字符串的内容:

字符串格式化输出:

name = input("name>>")

print("My name is %s" %name)

结果:
name>>lion My name is lion
PS: 字符串是 %s;整数 %d;浮点数%f

5、变量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头

变量的命名规则在前面的笔记中有记录,在此不作说明。

比如:

a = 1变量a是一个整数。
t_007 = 'T007'

变量t_007是一个字符串。

Answer = True

变量Answer是一个布尔值True

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):

int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

请不要把赋值语句的等号等同于数学的等号。比如下面的代码:

x = 10
x = x + 2

如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12

最后,理解变量在计算机内存中的表示也非常重要。当我们写:

a = 'ABC'

时,Python解释器干了两件事情:

  1. 在内存中创建了一个'ABC'的字符串;

  2. 在内存中创建了一个名为a的变量,并把它指向'ABC'

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据

a = 'ABC'
b = a
a = 'XYZ'
print(b)

最后一行打印出变量b的内容到底是'ABC'呢还是'XYZ'?如果从数学意义上理解,就会错误地得出ba相同,也应该是'XYZ',但实际上b的值是'ABC',让我们一行一行地执行代码,就可以看到到底发生了什么事:

执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC'

执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC'

执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:

所以,最后打印变量b的结果自然是'ABC'了。

6、常量

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

最后解释一下整数的除法为什么也是精确的。在Python中,有两种除法,一种除法是/

>>> 10 / 3
3.3333333333333335

/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:

>>> 9 / 3
3.0

还有一种除法是//,称为地板除,两个整数的除法仍然是整数:

>>> 10 // 3
3

你没有看错,整数的地板除//永远是整数,即使除不尽。要做精确的除法,使用/就可以。

因为//除法只取结果的整数部分,所以Python还提供一个余数运算,可以得到两个整数相除的余数:

>>> 10 % 3
1

无论整数做//除法还是取余数,结果永远是整数,所以,整数运算结果永远是精确的。

最新文章

  1. Norflash控制器的Verilog建模之二(仿真)
  2. MYSQL 博客
  3. python os.stat() 和 stat模块详解
  4. VPN column: PPTP(1)--connecting process
  5. 让动画不再僵硬:Facebook Rebound Android动画库介绍
  6. swift-07-使用for-in 遍历数组
  7. Java配置文件Properties的读取、写入与更新操作
  8. Struts2中的ActionContext
  9. placeholder属性兼容ie8
  10. 【剑指Offer学习】【面试题21:包括min 函数的栈】
  11. 为eclipse离线安装hibernate tools插件
  12. 【转】java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
  13. Python基础(十三) 为什么说python多线程没有真正实现多现程
  14. [Bat]如何彻底关闭每个盘符默认的共享$(即使重启也有效)
  15. 21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
  16. C#编程(七十六)----------使用指针实现基于栈的高性能数组
  17. poj1753(位运算压缩状态+bfs)
  18. 火币Huobi API
  19. 【LeetCode】130. Surrounded Regions (2 solutions)
  20. HTML页面每次打开的时候都清除页面缓存

热门文章

  1. coding利用Webhook实现Push代码后的jenkins自动构建
  2. 微信小程序填坑之路
  3. 微信小程序中用setData修改一个对象的属性值
  4. HashMap从源码分析数据结构
  5. 自适应手机网站meta name代码
  6. VS2013一次替换变量名
  7. 使用Visual VM 查看linux中tomcat运行时JVM内存
  8. andorid 数据储存
  9. spring batch批处理框架学习
  10. nodejs 开发服务端 child_process 调试方法(1)