Python基础之变量
本小节将介绍Python中的变量,包括变量命名,格式化输出,多变量赋值,变量和引用等内容。
变量命名
Python中的变量区分大小写,只能以大小写字母,下划线和数字组成,首字母不能是数字。例如:this_is_a_variable。
Guido推荐的变量、函数、类、模块命名规则:
- 模块名和包名采用小写字母并且以下划线分隔单词的形式,如:regex_syntax,py_compile,_winreg
- 类名或异常名采用每个单词首字母大写的方式,如:MyObject,MyError
- 全局或者类常量,全部使用大写字母,并且以下划线分隔单词,如:TOTAL_ACCOUNT
- 其余变量命名包括方法名,函数名,普通变量名则是采用全部小写字母,并且以下划线分隔单词的形式命名,如:print_info()
- 以上的内容如果是内部的,则使用一个下划线开头命名,如:_name,如果是系统内部方法或函数,则使用两个下划线,如:__init__,__new__
格式化输出
可用于拼接一个字符串,采用格式化的方式得到最终字符串。
格式 | 说明 | 示例 |
%s | 代表字符串 | print("The number is %s." % 3) =>The number is 3. |
%d | 代表十进制数 | print("%d" % 2.4) =>2 |
%f | 代表浮点数 | print("%.2f" % 2.4567) =>2.46 =>2.40 |
%x | 代表十六进制数 | print("%x" % 100) =>64 |
%o | 代表八进制数 | print("%o" % 100) =>144 |
%% | 代表% | print("%d%%" % 100) =>100% |
%r | 万能格式,能输出类型信息。调用内部函数__repr__。 | print("%r" % 100) =>100 |
多变量赋值
多变量赋值是Python中一个强大的功能,例如:
In [24]: a = 1
In [25]: b = 2
In [26]: c, d = a, b
In [27]: c
Out[27]: 1
In [28]: d
Out[28]: 2
实际上这里有两个知识点,一是 a,b,...n 这样的表达式的结果是构造出了一个元组,二是将一个元组赋值给多个变量。将元组赋值给多个变量需要注意的是变量的个数必须和元组中元素的个数相同,多了或少了都不行。例如:
In [22]: a = 1,2,3
In [23]: b,c = a
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-23-a0be01b72d6c> in <module>
----> 1 b,c = a
ValueError: too many values to unpack (expected 2)
多变量赋值可用于函数的参数和返回值,以实现可变参数和多个返回值。实际上其本质也是一个变量,只是这个变量是元组tuple类型,由于元组可以存放多个不同类型数据,所以看上去函数的参数和返回值支持多个参数。
多变量赋值可方便用于参数交换:
In [29]: a = 1
In [30]: b = 2
In [31]: a
Out[31]: 1
In [32]: b
Out[32]: 2
In [33]: a, b = b, a
In [34]: a
Out[34]: 2
In [35]: b
Out[35]: 1
变量和引用
- 变量中存放的是实参的地址(引用),内置函数id(xx)可用于查看某个变量在内存中的地址。函数传递参数时传递的是引用,变量和数据是分开的。
- list, dict 是可变类型,str, tuple, 数值类型等是不可变类型。
- 内置函数 hash(xx) 可得到变量的hash码(特征码),dict就是基于此的,这里的参数xx只能是不可变类型。
- 局部变量和全局变量。在函数中定义的变量都是局部变量,在函数外定义的变量都是全局变量。函数内部可以使用全局变量,但默认不能修改全局变量的值,如果试图修改全局变量的值,在Python中会认为创建了一个新的局部变量,不会真的修改全局变量。如果一定要在函数内部修改某个全局变量,需要使用 global 关键字声明该全局变量。
模块的代码结构
模块的概念在后面会介绍,这里可以理解成一个文件。一般来说,任何一个Python源文件,都满足一下代码结构:
Shebang
import xxx
全局变量
函数/类定义
main #可选
测试代码 #可选
例如:
#!/bin/python
import random
MIN = 1
MAX = 100
def get_random_num():
return random.randint(MIN, MAX)
def main():
for i in range(5):
num = get_random_num()
print(num)
if __name__ == '__main__':
main()
输出:
D:\work\python_workspace\python_study\venv\Scripts\python.exe D:/work/python_workspace/python_study/basic_03/code_structure.py
6
6
42
25
44
Process finished with exit code 0