Python语言基础

  • Python对象和引用
  • Python对象概述
  • Python是动态类型语言
  • Python是强类型语言
  • 对象内存
  • 对象的值比较(==)和引用判别(is)
  • 不可变对象(immutable)和可变对象(mutable)
  • 标识符及其命名规则
  • 标识符
  • 保留关键字
  • Python预定义标识符
  • 命名规则
  • 变量和赋值语句
  • 变量的声明和赋值
  • 链式赋值语句
  • 复合赋值语句
  • 删除变量
  • 系列解包赋值
  • 常量
  • 表达式和运算符
  • 表达式的组成
  • 书写表达式的规则
  • 运算符概述
  • 语句
  • Python语句的书写规则
  • 复合语句及其缩进书写规则
  • 注释语句
  • 空语句pass
  • 模块和函数
  • 函数的创建和调用
  • 内置函数
  • 模块函数
  • 函数API
  • 类和对象
  • 创建类对象
  • 实例对象的创建和调用
  • 模块和包



Python对象和引用

Python对象概述

计算机程序通常用于处理各种类型的数据(即对象),不同的数据属于不同的数据类型,支持不停的运算操作。

在Python语言中,数据表示对象,对象本质上是一个内存块,拥有特定的值,支持特定类型的运算操作。Python3中一切皆对象每个对象由标识符(identity)、类型(type)、和值(value)标识

  1. 标识用于唯一标识一个对象,通常对应于对象在计算机中的位置。使用内置函数id()可以返回对象的标识
  2. 类型用于表示对象所属的数据类型(类),用于限定对象的取值范围,以及允许执行的处理操作。使用内置函数type()可以返回对象所属的数据类型
  3. 值用于表示对象的数据类型的值。使用内置函数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解释器会自动确定其数据类型,事实上,变量仅用于指向某个类型对象,故变量不可以限定类型,即可以指向任何类型对象。通过标识符和赋值运算符(=),可以指定某个变量指向某个对象,即用该对象。多个变量可以引用同一个对象,一个变量也可以改变指向其他对象。

Python是强类型语言

Python是一种强类型语言,即每个变量指向的对象均属于某个数据类型,即只支持该类型允许的运算操作。

>>> a=7
>>> b='7'
>>> a+b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> b=7
>>> a+b
14
>>>

对象内存

Python程序运行时,在内存中会创建各种对象(位于堆内存中),通过赋值语句,可以将对象绑定到变量(位于栈内存),从而通过变量引用对象,进行各种操作

多个变量可以引用同一个对象,如果一个对象不再被任何有效作用域中的变量引用,则会通过自动垃圾回收机制,回收该对象占用的内存。

对象的值比较(==)和引用判别(is)

通过==运算符可以判断两个变量指向的对象的值是否相等;通过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
>>>

不可变对象(immutable)和可变对象(mutable)

Python3对象可分为不可变对象(immutable)和可变对象(mutable),不可变对象一旦创建,其值就不能被修改;可变对象的值可以修改。Python对象的可变性取决于其数据类型的设计,即是否允许改变其值。

Python3 中有六个标准的数据类型:

  1. Number(数字)
  2. String(字符串)
  3. List(列表)
  4. Tuple(元组)
  5. Set(集合)
  6. Dictionary(字典)

Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

标识符及其命名规则

在Python语言中,包、模块、类、函数、变量等的名称必须为有效标识符

标识符

标识符是变量、函数、类、模块和其他对象的名称。有效标识符的第一个字必须是字母或者下划线,其后的字符可以是字母、数字、或下划线。

注意:

  1. Python标识符区分大小写
  2. 保留关键字不能作为标识符
  3. 以双下划线开始或结束的名称通常具有特殊含义,一般避免使用
  4. 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 <expr>
   yield from <expr>

are equivalent to the yield expression statements

   (yield <expr>)
   (yield from <expr>)

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预定义标识符作为自定义标识符名
使用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教程

变量和赋值语句

对象引用即指向具体对象实例的标识符,也称之为“变量”

变量的声明和赋值

变量的声明和赋值用于把一个变量绑定到某个对象
变量名 = 字面量或表达式
最简单的表达式是字面量,Python基于字面量的值创建一个对象,并绑定到变量;对于复杂的表达式,Python先求值表达式,然后返回表达式结果对象,并绑定到变量,Python变量被访问之前必须要被初始化,即赋值(绑定到某个对象);否则会报错

链式赋值语句

变量1 = 变量2 = 表达式
等价于:变量2 = 表达式,变量1 = 变量2
链式赋值用于为多个变量赋同一个值

复合赋值语句

复合不仅可以简化程序代码,使程序更加精炼,还可以提高程序效率

Python学习笔记:Python语言基础_Python_02

删除变量

可以使用del语句删除不再使用的变量

>>> name='mochu'
>>> del name
>>> print(name)
Traceback (most recent call last):
  File "<stdin>", 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语言使用约定,声明在程序中不会改变的变量为常量,通常使用全大写字母(可以使用下划线增加可阅读性)表示常量名

表达式和运算符

表达式的组成

表达式是可以计算的代码片段,由操作数和运算符构成。操作数、运算符和圆括号按一定规则组成。表达式通过运算后产生运算结果,返回结果对象。运算结果对象的类型由操作数和运算符共同决定

书写表达式的规则

  1. 表达式从左到右在同一个基准上书写。例如,数学公式a2+b2应该写为:a**2+b**2。
  2. 乘号不能省略,例如,数学公式ab(表示a乘以b)应该写为:a*b。
  3. 括号必须成对出现,而且只能使用圆括号,圆括号可以嵌套使用

运算符概述

Python运算符用于在表达式对一个或多个操作数进行计算并返回结果值。接受一个操作数的运算符被称作一元运算符,例如,正负号运算符+或—。接受两个操作数的运算符被称作二元运算符,例如,算术运算符+、—、*、/等

如果一个表达式中包含多个运算符,则计算顺序取决于运算符的结合顺序和优先级,使用圆括号可以强制改变运算顺序

Python学习笔记:Python语言基础_Python_03


Python学习笔记:Python语言基础_Python基础教程_04

语句

语句是Python程序的过程构造模块,用于定义函数、定义类、创建对象、变量赋值、调用函数、控制分支、创建循环等

Python语句的书写规则

  1. 使用换行符分隔,一般情况下,一行一条语句。
  2. 从第一行开始,前面不能有任何空格,否则会产生语法错误。注意,注释语句可以从任何位置开始;复合语句构造体必须缩进
  3. 反斜杠(\)用于一个代码行跨越多行的情况。如果语句太长,可以使用续行符(\)。但三引号定义字符串、元组、列表、字典,可以放在多行,而不使用续行符(\),因为它们可以清晰的表示定义的开始和结束
  4. 分号(;)用于在一行书写多条语句

复合语句及其缩进书写规则

由多行代码组成的语句称为复合语句。复合语句(条件语句、循环语句、函数定义和类定义,例如 if、for、while、def、class等)由头部语句和构造体语句块组成的。构造体语句由一条或多条语句组成。复合语句和构造体语句块的缩进书写规则如下

  1. 头部语句由相应的关键字(例如,if)开始,构造体语句块则为下一行开始的一行或多行缩进代码
  2. 通常缩进是相对头部语句缩进4个空格,也可以是任意空格,但同一构造体代码块的多条语句缩进的空格数必须一致对齐。如果语句不缩进或者缩进不一致,将导致编译错误。注意:Python是强制缩进的语言,以保证源代码的规范性和可读性。另外,Python不建议使用制表符缩进,因为制表符在不同系统产生的缩进效果不一样
  3. 如果条件语句、循环语句、函数定义和类定义比较短,可以放在同一行。简洁、高效才是Python的风格

注释语句

单行注释以符号“#”开始,#.......

多行注释用三个单引号 '''.......''' 或者三个双引号 """.......""" 将注释括起来

空语句pass

如果要表示一个空的代码,可以使用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)的形式直接调用模块中的函数。

函数API

Python语言提供了海量的内置函数,标准函数,第三方模块函数。函数的调用方法由应用程序编程接口(API)确定,常用函数的API如下图所示:

Python学习笔记:Python语言基础_Python教程_05

类和对象

创建类对象

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 模块名   #导入模块
模块名.函数名    #使用包含模块的全限定名称调用模块中的函数
模块名.变量名    #使用包含模块的全限定名称访问模块中的变量