计算机程序通常用于处理各种类型的数据(即对象),不同的数据属于不同的数据类型,支持不停的运算操作。
在Python语言中,数据表示对象,对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作。Python3中一切皆对象
每个对象由标识符(identity)、类型(type)、和值(value)标识
id()
可以返回对象的标识type()
可以返回对象所属的数据类型print()
可以返回对象的值>>> id(123)
2031222608
>>> type(123)
<class 'int'>
>>> print(123)
123
>>> type(abs)
<class 'builtin_function_or_method'>
>>> id(abs)
14545776
>>> type(range)
<class 'type'>
>>> id(range)
2031134744
>>>
Python属于动态类型语言,即变量不需要显式声明数据类型。根据变量的赋值,Python解释器会自动确定其数据类型,事实上,变量仅用于指向某个类型对象,故变量不可以限定类型,即可以指向任何类型对象。通过标识符和赋值运算符(=),可以指定某个变量指向某个对象,即用该对象。多个变量可以引用同一个对象,一个变量也可以改变指向其他对象。
Python是一种强类型语言,即每个变量指向的对象均属于某个数据类型,即只支持该类型允许的运算操作。
>>> a=7
>>> b='7'
>>> a+b
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> b=7
>>> a+b
14
>>>
Python程序运行时,在内存中会创建各种对象(位于堆内存中),通过赋值语句,可以将对象绑定到变量(位于栈内存),从而通过变量引用对象,进行各种操作
多个变量可以引用同一个对象,如果一个对象不再被任何有效作用域中的变量引用,则会通过自动垃圾回收机制,回收该对象占用的内存。
通过
==
运算符可以判断两个变量指向的对象的值是否相等;通过is
运算符可以判断两个变量是否指向同一对象
>>> name='m0c1nu7'
>>> id=name
>>>
>>>
>>> name='mochu'
>>> id=name
>>> nickname='m0c1nu7'
>>> name==id
True
>>> name is id
True
>>> name==nickname
False
>>> name is nickname
False
>>>
Python3对象可分为不可变对象(immutable)和可变对象(mutable),不可变对象一旦创建,其值就不能被修改;可变对象的值可以修改。Python对象的可变性取决于其数据类型的设计,即是否允许改变其值。
Python3 中有六个标准的数据类型:
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
在Python语言中,包、模块、类、函数、变量等的名称必须为有效标识符
标识符是变量、函数、类、模块和其他对象的名称。有效标识符的第一个字必须是字母或者下划线,其后的字符可以是字母、数字、或下划线。
注意:
- Python标识符区分大小写
- 保留关键字不能作为标识符
- 以双下划线开始或结束的名称通常具有特殊含义,一般避免使用
- Python预定义标识符不能作为自定义标识符
关键字即预定义保留标识符。关键字具有特殊的语法含义
>>> help()
Welcome to Python 3.8's help utility!
If this is your first time using Python, you should definitely check out
the tutorial on the Internet at https://docs.python.org/3.8/tutorial/.
Enter the name of any module, keyword, or topic to get help on writing
Python programs and using Python modules. To quit this help utility and
return to the interpreter, just type "quit".
To get a list of available modules, keywords, symbols, or topics, type
"modules", "keywords", "symbols", or "topics". Each module also comes
with a one-line summary of what it does; to list the modules whose name
or summary contain a given string such as "spam", type "modules spam".
help> keywords
Here is a list of the Python keywords. Enter any keyword to get more help.
False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not
help> yield
The "yield" statement
*********************
yield_stmt ::= yield_expression
A "yield" statement is semantically equivalent to a yield expression.
The yield statement can be used to omit the parentheses that would
otherwise be required in the equivalent yield expression statement.
For example, the yield statements
yield
yield from
are equivalent to the yield expression statements
(yield )
(yield from )
Yield expressions and statements are only used when defining a
*generator* function, and are only used in the body of the generator
function. Using yield in a function definition is sufficient to cause
that definition to create a generator function instead of a normal
function.
For full details of "yield" semantics, refer to the Yield expressions
section.
help> quit
You are now leaving help and returning to the Python interpreter.
If you want to ask for help on a particular object directly from the
interpreter, you can type "help(object)". Executing "help(' string')"
has the same effect as typing a particular string at the help> prompt.
>>>
Python语言包含许多预定义内置类、异常函数等。用户应该避免使用Python预定义标识符作为自定义标识符名
使用Python内置函数dir(__builtins__)
可以查看所有内置的函数名、异常名等
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>>
对象引用即指向具体对象实例的标识符,也称之为“变量”
变量的声明和赋值用于把一个变量绑定到某个对象
变量名 = 字面量或表达式
最简单的表达式是字面量,Python基于字面量的值创建一个对象,并绑定到变量;对于复杂的表达式,Python先求值表达式,然后返回表达式结果对象,并绑定到变量,Python变量被访问之前必须要被初始化,即赋值(绑定到某个对象);否则会报错
变量1 = 变量2 = 表达式
等价于:变量2 = 表达式,变量1 = 变量2
链式赋值用于为多个变量赋同一个值
复合不仅可以简化程序代码,使程序更加精炼,还可以提高程序效率
可以使用
del
语句删除不再使用的变量
>>> name='mochu'
>>> del name
>>> print(name)
Traceback (most recent call last):
File "" , line 1, in <module>
NameError: name 'name' is not defined
>>>
Python支持系列数据类型解包为对应相同个数的变量
>>> a,b=1,2
>>> a
1
>>> b
2
>>> a,b=(3,4)
>>> a
3
>>> b
4
>>>
另外,在Python中可以使用,a,b=b,a
这样的方式实现两个变量的值的交换
>>> name='mochu'
>>> id='m0c1nu7'
>>>
>>> name
'mochu'
>>> id
'm0c1nu7'
>>>
>>> name,id=id,name
>>>
>>> name
'm0c1nu7'
>>> id
'mochu'
>>>
Python语言不支持常量,即没有语法规则改变一个常量的值。Python语言使用约定,声明在程序中不会改变的变量为常量,通常使用全大写字母(可以使用下划线增加可阅读性)表示常量名
表达式是可以计算的代码片段,由操作数和运算符构成。操作数、运算符和圆括号按一定规则组成。表达式通过运算后产生运算结果,返回结果对象。运算结果对象的类型由操作数和运算符共同决定
Python运算符用于在表达式对一个或多个操作数进行计算并返回结果值。接受一个操作数的运算符被称作
一元运算符
,例如,正负号运算符+或—。接受两个操作数的运算符被称作二元运算符,例如,算术运算符+、—、*、/等
如果一个表达式中包含多个运算符,则计算顺序取决于运算符的结合顺序和优先级,使用圆括号可以强制改变运算顺序
语句是Python程序的过程构造模块,用于定义函数、定义类、创建对象、变量赋值、调用函数、控制分支、创建循环等
续行符(\)
。但三引号定义字符串、元组、列表、字典,可以放在多行,而不使用续行符(\),因为它们可以清晰的表示定义的开始和结束分号(;)
用于在一行书写多条语句由多行代码组成的语句称为复合语句。复合语句(条件语句、循环语句、函数定义和类定义,例如 if、for、while、def、class等)由头部语句和构造体语句块组成的。构造体语句由一条或多条语句组成。复合语句和构造体语句块的缩进书写规则如下
4
个空格,也可以是任意空格,但同一构造体代码块的多条语句缩进的空格数必须一致对齐。如果语句不缩进或者缩进不一致,将导致编译错误。注意:Python是强制缩进的语言
,以保证源代码的规范性和可读性。另外,Python不建议使用制表符缩进,因为制表符在不同系统产生的缩进效果不一样简洁、高效才是Python的风格
单行注释以符号“#”开始,
#.......
多行注释用三个单引号
'''.......'''
或者三个双引号"""......."""
将注释括起来
如果要表示一个空的代码,可以使用pass语句。
>>> def hello():print('Hello!')
...
>>> hello()
Hello!
>>>
>>>
>>> def do_nothing():pass
...
>>> do_nothing()
>>>
Python语言包括许多内置函数,
函数是具有一定功能的代码块
,如print,max等,用户也可以自定义函数。函数是可以重复调用的代码块。使用函数,可以有效地组织代码,提高代码的复用率。
Python使用复合语句
def
创建函数对象。其语法格式如下:
def 函数名([形参列表]):#定义函数
函数体
函数名([实参列表])#调用函数
声明函数的时,可以声明函数的参数,即形式参数,简称
形参
;调用函数时,需要提供函数需要的参数的值,即实际参数,简称实参
函数可以使用return
返回值,无返回值的函数相当于其他编程语言中的过程。
Python语言包含若干常用的内置函数,例如
dir()、type()、id()、help()、len()
等,可以直接使用
通过import
语句,可以导入模块module
,然后使用module.function(arguments)
的形式调用模块中的函数,也可以通过from ... import ...
的形式直接导入包中的常量、函数和类,或者通过from ... import *
导入包中所有的元素,然后使用function(arguments)
的形式直接调用模块中的函数。
Python语言提供了海量的内置函数,标准函数,第三方模块函数。函数的调用方法由应用程序编程接口(API)确定,常用函数的API如下图所示:
Python使用复合语句class创建对象,其语法格式如下:
class 类名:
类体
类体中可以定义属于类的属性,方法
基于类对象,可以创建其实例对象,然后访问其方法或属性。其语法格式如下:
Anobject=类名(参数列表)
Anobject=对象方法 或 Anobject.对象属性
class Hello:#定义类
myname='末初'#定义属性
def MyIntroduce(self,name1):#self是定义Hello类的MyIntroduce函数,name1是形参
yourname=name1#交接一下name1,这一步也可以省略直接使用形参名
print("Hello %s, My name is %s"%(yourname,Hello.myname))#输出
name='楚末'#定义一个变量作为实参
a=Hello()#创建对象
a.MyIntroduce(name)#调用对象方法,name是实参
运行结果
PS C:\Users\Administrator\Desktop\Test\py\py3> python .\test.py
Hello 楚末, My name is 末初
Python语言中,包含Python代码的源文件(通常包含用户自定义的变量、函数和类)称为模块,其扩展名为
.py
功能相近的模块可以组成包,包是模块的层次性组织结构
Python标准库和第三方库中提供了大量的模块,通过
import
语句,可以导入模块,并使用其定义的功能。导入和使用模块功能的基本形式如下
import 模块名 #导入模块
模块名.函数名 #使用包含模块的全限定名称调用模块中的函数
模块名.变量名 #使用包含模块的全限定名称访问模块中的变量