第二章 Python基础知识

-------------------------纯手打总结,转载请注明出处,爱您~


2.1常用内置对象

* 对象是python语言中最基本的概念,在python中处理的一切都是对象

* python中有许多内置对象可供编程者使用,内置对象可直接使用,如数字、字符串、列表、del等。

* 非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random()等。

*常用内置对象:


2.1.1常量与变量

* 在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量。这一点适用于Python任意类型的对象。例如下列语句,创建了整型变量x,并赋值为3,以及创建了字符串变量x,并赋值为'Hello world'

>>> x=3

>>> x='Hello world'

* python属于强类型编程语言,python解释器会根据赋值或运算来自动推断变量类型。python还是一种动态类型语言,变量的类型也是可以随时变化的。

* 赋值语句的执行过程是:首先把等号右侧表达式的值计算出来,然后在内存中寻找一个位置把值存放进去,最后创建变量并指向这个内存地址。

* python中的变量并不直接存储值,而是存储了值的地址或者引用,这也是变量类型随时可以改变的原因。

Notes:Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值(仅适用于-5至256的整数和短字符串),这个值在内存中只有一份,多个变量指向同一块内存地址。

*在定义变量名的时候,需要注意一下问题:

√  变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义;

√ 变量名中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等);

不能使用关键字作变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有python关键字;

√ 变量名对英文字母的大小写敏感,例如student和Student是不同的变量;

√ 使用Python变量前必须给它赋值。

不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名,这将会改变其类型和含义,可以通过dir(__builtins__)查看所有内置板块、类型和函数;如下图:

2.1.2 数字

* python支持任意大的数字,具体可以大到什么程度仅受内存大小的限制。

* 由于精度的问题,对于实数运算可能会有一定的误差,应尽量避免在实数之间直接进行相等性测试,而是应该以两者之差的绝对值是否足够小作为两个实数是否相等的依据。

* 在数字的算数运算表达式求值时会进行隐式的类型转换,如果存在复数则都变成复数,如果没有复数但是有实数就都变成实数,如果都是整数则不进行类型转换。


* python内置支持复数类型及其运算,并且形式与数学上的复数完全一致。


python中位于两个数字之间的单个下划线没有意义,相当于空格

*  python标准库fractions中的Fraction对象支持分数及其运算


* 标准库 fractions和decimal中提供的Decimal类实现了更高精度实数的运算

2.1.3 字符串与字节串

* 在python中,没有字符常量和变量的概念,只有字符串类型的常量和变量单个字符也是字符串。使用单引号、双引号、三单引号、三双引号作为定界符(delimiter)来表示字符串,并且不同的定界符之间可以互相嵌套

*  python3.X全面支持中文,中文和英文字母都作为一个字符对待,甚至可以使用中文作为变量名

*  除了支持使用加号运算符连接字符串外,python字符串还提供了大量的方法支持格式化、查找、替换、排版等操作。

* 三引号怎么打出来???

*  对str类型的字符串调用其encode()方法进行编码得到bytes字节串,对bytes字节串调用其decode()方法并指定正确的编码格式则得到str字符串。

2.1.4列表、元组、字典、集合

2.2运算符与表达式

*  python是面向对象的编程语言,在python中一切都是对象,对象由数据和行为两部分组成,而行为主要通过方法来实现,通过一些特殊方法的重写,可以实现运算符重载。

运算符也是表现对象行为的一种形式不同类的对象支持的运算符有所不同,同一种运算符作用于不同的对象时也可能会表现出不同的行为,这正是"多态"的体现。比如*在数字中表示乘号,而两个**表示乘方。

*  运算符优先级遵循的规则为:算术运算符优先级最高(算术运算符遵循"先乘除,后加减"的基本运算原则),其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等。

*  虽然python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性。

2.2.1算术运算符

(1)+运算符除了用于算术加法以外,还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。

(2)*运算符除了表示算术乘法,还可用于列表、元组、字符串这几个序列类型与整数的乘法,表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的

(3)运算符  /  和  //  在python中分别表示算术除法和算术求整商(floor division)。

(4)%运算符可以用于整数或实数的求余数运算,还可以用于字符串格式化,但是这种用法并不推荐。

(5)**运算符表示幂乘,与内置函数pow()等价:

pow(x,y[,z])幂余,(x**y)%z,[,,]表示参数z可省略。pow(3,pow(3,99),10000)结果为4587

有意思的是,当我们在python中计算pow(3,pow(3,99))如果不加第三个参数z,那么这个数据是无法在普通的计算机中得到结果的。因为3的3的99次方是一个非常大的数,他应该超过了我们计算机普通内存的大小,所以我们通过余数z使得在幂运算过程中它始终保持在余数范围内,它的运算会非常迅速.

2.2.2关系运算符

* python关系运算符最大的特点是可以连用,其含义与我们日常的理解完全一致。使用关系运算符的一个最重要的前提是,操作数之间必须可比较大小。例如把一个字符串和一个数字进行大小比较是毫无意义的,所以python也不支持这样的运算。

>>> 1<3<5                     #等价于1<3and 3<5

True

>>> 1>6

False

>>> 1<6

Traceback (most recent call last):

  File "", line 1, in

NameError: name 'math' is not defined

>>> import math

>>> 1<6

False

 >>> 'Hello'>'world' #比较字符串大小                                                         

False                                                                                                          

 >>> [1,2,3] < [1,2,4] #比较列表大小                                                                True

>>> 'Hello'>3 #字符串和数字不能比较

Traceback (most recent call last):                                                                 

   File "", line 1, in                                                         TypeError: '>' not supported between instances of 'str' and 'int'

>>> {1,2,3}<{1,2,3,4} #测试是否子集                                                                True                                                                                                          

  >>> {1,2,3}=={3,2,1} #测试两个集合是否相等                                                

True                                                                                                                   

>>> {1,2,4}>{1,2,3}     #集合之间的包含测试                                               

 False

2.2.3成员测试运算符in与同一性测试运算

* 成员测试运算符in用于成员测试,即测试一个对象是否为另一个对象的元素。

>>> 3 in[1,2,3] #测试3是否存在于列表[1,2,3]中/not in                                True                                                                                                           

 >>> 5 in range(1,10,1) #range()是用来生成指定范围数字的内置函数        

True                                                                                                            

>>> 'abc' in 'abcdefg' #子字符串测试                                                            

True

* 同一性测试运算符is用来测试两个对象是否是同一个,如果是则返回True,否则返回False。如果两个对象是同一个,二者具有相同的内存地址

>>> 3 is 3

True

>>> x=[300,300,300]

>>> x[0] is x[1] #基于值的内存管理,同一个值在内存中只有一份

True

>>> x=[1,2,3]

>>> y=[1,2,3]

>>> x is y #上面形式创建的x和y不是同一个列表对象

False

>>> x[0] is y[0]

True

2.2.4位运算符与集合运算符

* 集合的交集、并集、对称差集等运算借助于位运算符来实现,而差集则使用减号运算符实现(注意,并集运算符不是加号)。

>>> {1,2,3} | {3,4,5} #并集,自动去除重复元素

{1, 2, 3, 4, 5}

>>> {1,2,3} &{3,4,5} #交集

{3}

>>> {1,2,3} ^{3,4,5} #对称差集(集合A与集合B中所有不属于A∩B的元素的集合)

{1, 2, 4, 5}

>>> {1,2,3}-{3,4,5}#差集

{1, 2}

练习:并集( '|' )、交集( '&' )、对称差集( '^' )、差集( '-' )。

2.2.5逻辑运算符

* 逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有惰性求值或逻辑短路的特点。当连接多个表达式时只计算必须要计算的值

* 在编写复杂条件表达式时充分利用这个特点,合理安排不同条件的先后顺序,在一定程度上可以提高代码运行速度。

* 另外要注意的是,运算符and和or并不一定会返回True或False,而是得到最后一个被计算的表达式的值,但是运算符not一定返回True或False

>>> 3>5 and a>3 #注意,此时并没有定义变量a

False

>>> 3>5  or  a>3  #3>5的值为False,所以需要计算后面的表达式

Traceback (most recent call last):

  File "", line 1, in

    3>5  or  a>3  #3>5的值为False,所以需要计算后面的表达式

NameError: name 'a' is not defined

>>> 3<5  or  a>3  #3>5的值为True,不需要计算后面的表达式

True

>>> 3 and 5  #最后一个计算的表达式的值作为整个表达式的值

5

>>> 3 and 5>2

True

>>> 3 is not 5  #not的计算结果只能是True或False之一

True

>>> not 3

False

>>> not 0

True

练习:1.根据年历知识年份y是否为闰年的条件是下列条件之一成立。

(1)这一年可被4整除,同时不能被100整除;

(2)这一年可被400整除。

请写出年份(y)是闰年的判断条件。

              (y%4==0 and  y%100!=0)  or   (y%400==0)

验证如下:

>>> y=1600

>>> (y%4==0 and  y%100!=0)  or  (y%400==0)

True

>>> y=1000

>>> (y%4==0 and  y%100!=0)  or  (y%400==0)

False

2.2.6 矩阵乘法运算符@

* 从Python 3.5开始增加了一个新的矩阵相乘运算符@,不过由于Python没有内置的矩阵类型,所以该运算符常与扩展库numpy一起使用。

>>> import numpy #numpy是用于科学计算的pyhon扩展库

>>> x=numpy.ones(3)  #ones()函数用于生成全1矩阵,参数表示矩阵大小

>>> m=numpy.eye(3)*3  #eye()函数用于生成单位矩阵

>>> print(x)

[1. 1. 1.]

>>> print(m)

[[3. 0. 0.]

[0. 3. 0.]

[0. 0. 3.]]

>>> m[0,2]=5  #设置矩阵指定位置上元素的值

>>> m[2,0]=3

>>> print(x @ m)  #矩阵相乘

[6. 3. 8.]     ???复习矩阵知识,要不然不理解怎么算的,,,

2.3Python关键字简要说明

* Python关键字只允许用来表达特定的语义,不允许通过任何方式改变它们的含义,也不能用来做变量名、函数名或类名等标识符。

* 在Python开发环境中导入模块keyword之后,可以使用print(keyword.kwlist)查看所有关键字。


2.4常用内置函数

Python常用内置函数用法精要



dir(_builtins_)

使用help(函数名)可以查看某个函数的用法:

>>> help(sum)

Help on built-in function sum in module builtins:

sum(iterable, start=0, /)

    Return the sum of a 'start' value (default: 0) plus an iterable of numbers


    When the iterable is empty, return the start value.

    This function is intended specifically for use with numeric values and may

    reject non-numeric types.

2.4.1类型转换

* list()、tuple()、dict()、set()、frozenset()用来把其他类型的数据转换成为列表、元组、字典、可变集合和不可变集合,或者创建空列表、空元组、空字典和空集合。

>>> list(range(5)) #把range对象转换为列表

[0, 1, 2, 3, 4]

>>> tuple(_)  #一个下划线表示上一次正确的输出结果

(0, 1, 2, 3, 4)

>>> dict(zip('1234','abcde'))  #创建字典

{'1': 'a', '2': 'b', '3': 'c', '4': 'd'}

>>> set('1112234')  #创建可变集合,自动去除重复

{'4', '2', '3', '1'}

>>> _.add('5')

>>> _

{'2', '3', '5', '4', '1'}

>>> frozenset('1112234')  #创建不可变集合,自动去除重复

frozenset({'4', '2', '3', '1'})

>>> _.add('5')  #不可变集合frozenset不支持元素添加与删除

Traceback (most recent call last):

  File "", line 1, in

    _.add('5')  #不可变集合frozenset不支持元素添加与删除

AttributeError: 'frozenset' object has no attribute 'add'

2.4.2  类型判断

* 内置函数type()和isinstance()可以用来判断数据类型,常用来对函数参数进行检查,可以避免错误的参数类型导致函数崩溃或返回意料之外的结果。

>>> type(3) #查看3的类型

>>> type({3}) in (list,tuple,dict)  #判断{3}是否为list,tuple或dict类型的实例

False

>>> type({3}) in (list,tuple,dict,set) #判断{3}是否为list,tuple,dict或set的实例

True

>>> isinstance(3,int)  #判断3是否为int类型的实例

True

>>> isinstance(3j,(int,float,complex))  #判断3j是否为int,float或complex类型

True

2.4.3基本输入输出

* input()和print()是Python的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。不论用户输入什么内容,input()一律返回字符串对待,必要的时候可以使用内置函数int()、float()或eval()对用户输入的内容进行类型转换。

>>> x=input("Please input:")

Please input:345

>>> x

'345'

>>> type(x)    #把用户的输入作为字符串对待

>>> int(x)    #转换为整数

345

>>> eval(x) #类型转换,list,tuple,dict和string相互转化

345

>>> x=input("Please input:")

Please input:[1,2,3]

>>> x

'[1,2,3]'

>>> type(x)

>>> eval(x)

[1, 2, 3]

练习作业:

1.从键盘输入一个学生的语文、数学、英语成绩,计算其总分与平均分。

>>> a=input("请输入学生的姓名:")

请输入学生的姓名:小红

>>> b=input("学生"+x+"的语文成绩为:")

学生小红的语文成绩为:88

>>> c=input("学生"+x+"的数学成绩为:")

学生小红的数学成绩为:75

>>> d=input("学生"+x+"的英语成绩为:")

学生小红的英语成绩为:84

>>> x=int(b)+int(c)+int(d)

>>> y=x/3

>>> print("您好,学生"+str(a)+"的语文、数学、英语成绩分别为:"+str(b)+"分、"+str(c)+"分、"+str(d)+"分;\n三门学科总分为:"+str(x)+"分,平均分为:"+str(y)+"分")

您好,学生小红的语文、数学、英语成绩分别为:88分、75分、84分;

三门学科总分为:247分,平均分为:82分

2.用户输入一个三位自然数,计算并输出其佰位、十位和个位上的数字。

>>> x=input("请输入一个自然三位数:")

请输入一个自然三位数:123

>>> a=int(x)//100

>>> b=(int(x)-a*100)//10

>>> c=int(x)-a*100-b*10

>>> print("你好,你所输入的自然三位数中,百位上的数字为:"+str(a)+";十位上的数字为:"+str(b)+";个位上的数字为:"+str(c)+".")

你好,你所输入的自然三位数中,百位上的数字为:4;十位上的数字为:5;个位上的数字为:6.



>>> 

请输入一个自然三位数:896

>>> 

>>> 

>>> 

>>> 

你好,你所输入的自然三位数中,百位上的数字为:8;十位上的数字为:9;个位上的数字为:6.



-------------------------纯手打总结,转载请注明出处,爱您~

你可能感兴趣的:(第二章 Python基础知识)