python语法知识讲解_python语法知识

1、range的使用:

range(5):包含左边不包含右边

range()函数的语法如下:

range(start, end[, step])

参数说明:

start: 计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于 range(0, 5);

end: 计数到 end 结束,但不包括 end。例如:range(0, 5) 等于 [0, 1, 2, 3, 4],没有5;

step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

c2a23179ac5345e7bdc172acfcbeb839.jpg

a[-3]:从后边数第三个

a[2-3]=a[-1]:倒数第一个

2、python数据类型

Python标准的内置数据类型有:

Number(整数型 int , 浮点数型 float, 布尔型 bool , 复数 complex)

String List Tuple Set Dictionary

Python可变数据类型:可改变变量的值,且不会新建对象

List Dictionary Set

Python不可变数据类型:不允许变量的值发生改变,发生改变时会新建对象

Tuple string Number

3、深拷贝和浅拷贝

python2,3: 列表和字典直接赋值是浅拷贝,浅拷贝情况下对其中一个的改变都会相应改变另一个

深拷贝:拷贝完完全不相干了

a=2

b=a #浅拷贝

b=a.copy() #深拷贝

6a872623c02c4e9890619b1649fdf55b.jpg

解答:

import copy

a = [1, 2, 3, 4, [‘a’, ‘b’]]

b = a # 引用,除非直接给a重新赋值,否则a变则b变,b变则a变

c = copy.copy(a) # 浅复制,只会拷贝父对象, 不会拷贝父对象中的子对象,所以若a的子对象变则c 变,但是父对象变c不会变

d = copy.deepcopy(a) #深拷贝,完全拷贝,完全独立于原对象,a变也不变

a.append(5) # 改变父对象

a[4].append(‘c’) #改变父对象中的 [‘a’, ‘b’]子对象

#a=[1, 2, 3, 4, [‘a’, ‘b’,‘c’],5]

b=[1, 2, 3, 4, [‘a’, ‘b’,‘c’],5]

c=[1, 2, 3, 4, [‘a’, ‘b’,‘c’]]

d=[1, 2, 3, 4, [‘a’, ‘b’]]

4、闭包

如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

一般情况下,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

具体就是5+6+5=16

748da429d8b847b68fbc2998ee047255.jpg

5、xrange

1.xrange() 函数用法与 range 完全相同,

所不同的是生成的不是一个数组,而是一个生成器。

2.0的任何次方的值都为1

41cf386bd80c456aaebb0fbd92c2d122.jpg

30a4540f3fe745ab902d08e170beb582.png

6、math.floor函数

0a9e1fb96360407fbfe2cbd20742e665.png

Python3中答案是5,向下取整,结果为整型,Python2中答案是5.0

以下是 Python3 帮助文档的说明,math.floor() 函数的返回值应为整型,而不是浮点型,所以答案应该为5。

4ea655f57fb8471992b7ef6177391c03.png

更正说明:正确答案应该是B,由于本人没注意到是 Python2 的执行环境,导致以上分析有误,在此致歉。

感谢 @HarrisonShen 的提醒,原来 Python2 的 math.floor() 函数返回值是浮点型,请大家注意!所以答案应该为5.0。

d94675cff2f9440ab4580e631c00aea5.png

详情可参考官方文档:Python2 math.floor

7、系统变量

name:name是一个变量,前后加了__ __标记为系统变量,name__用于标识模块的名字的一个系统变量。

当我单独执行一个模块,我的这个系统变量的值为__main

当我在模块2导入“这个模块”后,”这个模块”的__name__值为这个模块的名称:“这个模块”。在不同的场所用更方便你理解的化名。

‘main’:是顶级代码执行的作用域的名称。

8、python中主要存在四种命名方式

Python中单下划线_foo与双下划线__foo与__foo__的成员

1、object #公用方法

2、_object #半保护

#被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,

在模块或类外不可以使用,不能用’from module import *’导入。

#object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父

类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是

classname__methodname。

3、 _ object #全私有,全保护

#私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访

问到这个数据,不能用’from module import *’导入。

4、 _ object _ #内建方法,用户不要这样定义

8、python中Unicode编码

在Python 2.7中,下列哪种是Unicode编码的书写方式?

7011ea5078fc4364bfb9a909c44909f9.jpg

解析:

unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk ……python 在内部使用两个字节来存储一个unicode,使用unicode对象而不是str的好处,就是unicode方便于跨平台。你可以用如下两种方式定义一个unicode:

s1 = u"人生苦短"

s2 = unicode(“人生苦短”, “utf-8”)

r/R:非转义的原始字符串

b:bytes

python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes

python2.x里, b前缀没什么具体意义

9、单引号、双引号

1868659efce44e9b97344ffc2e19605b.jpg

python里面%d表数字,%s表示字符串,%%表示一个%;

单引号内嵌套单引号需要转义字符/;单引号内嵌套双引号不需要嵌套;

双引号内嵌套双引号需要转义字符/;双引号内引用单引号不需要转义字符;

10、协程

44095a5f567947038d9249db53390180.png

线程由操作系统控制,

协程由程序自身控制

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

11、golbal的使用

当内部作用域想修改外部变量时,需要使用global声明。

What gets printed?(4)

counter = 1

def doLotsOfStuff():

global counter

for i in (1, 2, 3): #i为1,2,3

counter += 1

doLotsOfStuff()

print counter

12、python的三元运算符

min = x if x13、异常

0a8ab77acc194a6bb9a891e4b1755b83.png

try:的语句出现异常才会执行except后的语句,如果正常,则执行完try后执行else。另外,finally语句不管有无异常都会执行。

14、函数名

19a62e4b1aa14eba8cd94da648357a41.png

在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

15、复数

(1)表示复数的语法是real + image j

(2)实部和虚部都是浮点数

(3)虚部后缀可以为j或J

(4)方法conjugate返回复数的共轭复数

16、解释性语言

解释型语言的特性:

非独立

效率低

解释性语言和编译性语言的定义:

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。

解释性语言的定义:

解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

编译性语言的定义:

编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

17、对象的布尔值是false

下列对象的布尔值都是False:

NONE;

False(布尔类型)

所有的值为零的数

0(整型)

0.0(浮点型)

0L(长整型)

0.0+0.0j(复数)

“”(空字符串)

[](空列表)

()(空元组)

{}(空字典)

18、布尔测试

c85c252f6fc84730b0cbc50e15099406.jpg

字典类型也是可以用于布尔测试的

19、字符串编码和解码

有一段python的编码程序如下:urllib.quote(line.decode(“gbk”).encode(“utf-16”)),请问经过该编码的字符串的解码顺序是

06d0444748e64d64a04ba240f71e0d9f.jpg

字符串编译的过程:gbk==>unicode==>utf16==>url解码

字符串解码顺序为:url解码==>utf16==>unicode==>gbk

20、比较大小

ba6ae37eff51420ab097fa34cb17daa6.jpg

复数不能比较大小,ASCII码中小写字母>大写字母>数字

选项 D:字符串的比较与 tuple 类似,也是从第一个字符开始比较 ASCII 码,直到两个字符不相等为止。

字母与数字的ASCII 码大小范围是== “a-z” > “A-Z” > “0-9”==,D选项中 ‘a’ < ‘x’,

21、lambda表达式

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

map()接收两个参数,一个是功能函数f,一个list,并将f依次作用在list的每个元素上,并返回一个新的list,a**b是求a的b次方的意思

6d8c89f90779413189c7a1524a63d978.jpg

[1,8,27]

22、python不支持的数据类型

python 中的标准数据类型:

ec4e4019a46847f9a92e03a487c77046.jpg

其中数字类型有:

a13876b936ea4289a70e645e962a3198.jpg

注意:

string 不是 char!!!

可变数据类型:列表list[ ]、字典dict{ }

不可变数据类型:整型int、字符串str’ '、元组tuple()

23、函数的参数顺序

Python参数顺序:必选参数、默认参数、可变参数(*args)和关键字参数(**kwargs)。

当args与位置参数和默认参数混用的情况下:(注意三者的顺序)

示例一、(三者顺序是:位置参数、默认参数、*args)

def foo(x,y=1,*args):

pass

foo (1,2,3,4,5)

// 其中的x为1,y=1的值被2替换,3,4,5都给args,即args=(3,4,5)

示例二、(三者顺序是:位置参数、*args、默认参数)

def foo(x,*args,y=1):

pass

foo (1,2,3,4,5)

// 其中的x为1,2,3,4,5都给args,即args=(2,3,4,5),y始终为1

kwargs:(表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现)

关于kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)

位置参数、*args、**kwargs三者的顺序必须是位置参数、*args、**kwargs,不然就会报错:

示例:

def foo(x,*args,**kwargs):

pass

foo (1,2,3,4,y=5,a=6,b=7) // 其中的x为1,2,3,4都给args,即args=(2,3,4),y=5,a=6,b=7以字典形式传给kwargs,

即kwargs={‘y’:5,‘a’:6,‘b’:7}

24、装饰器

7e8cd5412c0940e88df47f116414b8a2.jpg

a0f7819e1ea84f49a3f56b9ad7a643ba.jpg

dd790fdfdf224fa89a10953c3daa58f8.jpg

先计算foo的值,在作为参数传递给dec。

25、赋值

多重赋值:x=y=z=1

多元赋值:x,y,z=1,3,‘a string’

增量赋值:x+=1

但是y=(x=x+1)

并不适用python,等号右边不能是赋值语句

e7dba995ec954534bc0b986d71d167ba.jpg

26、逻辑运算

下列代码运行结果是? c

a = ‘a’

print a > ‘b’ or ‘c’

73edb6d4e8cf4749a87d04e63878cc48.jpg

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值