wangEditor扩展一个查看源码的功能

2021牛客暑期多校训练营2 I.Penguins

  返回  

Python3基础知识

2021/7/20 14:19:20 浏览:

1. 多个变量赋值:

  • a = b = c =1;

  • a, b, c = 1, 2, 'test'

2. 6个标准数据类型:

  • 不可变数据3个:Number(数字),String(字符串),Tuple(元组);

  • 可变数据3个:List(列表),Dictionary(字典),Set(集合)。

  • 备注:string、list 和 tuple 都属于 sequence(序列)。

2.1 Number(数字):

  • python3支持int,float,bool(True,False),complex(复数);没有python2中的long。另外python2中没有bool,用的0和1。

  • 数值的除法有2个运算符:/ 返回一个浮点数;// 返回整数部分(结果取整数部分,不四舍五入)。python2中 / 是取整,同3中的 // 。

  • 注意:// 得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。如:7 // 2.0 # 结果:3.0

2.2 String(字符串):

  • 字符串用单引号 ' 或者双引号 " 括起来;

  • \ 可用来转义;也可用来作续行符;

  • 字符串前面添加一个 r,表示原始字符串,不转义;

  • 字符串有2种索引方式:从左到右以0开始;从右到左以-1开始;

  • 与C不同,python中的字符串不能改变;

  • 运算符[]:通过索引获取字符串中的字符;

  • 运算符[:]:截取字符串中的一部分,左闭右开;str[0,2] 是不包含第 3 个字符的。

2.3 Tuple(元组):

  • 虽然元组的元素不可改变,但是它也可以包含可变的对象,如list列表;

  • 构造0或1个元素的元组比较特殊,语法如下:tup1 = () # 空元组;tup2 = (12,) # 一个元素,需要在元素后添加逗号;

  • 元组中的元素值不允许删除,只能通过del语句来删除整个元组。

2.4 Set(集合):

  • 基本功能是:进行成员关系测试,和 删除重复元素;如:print(set('abacc')) # 结果是{'a', 'b', 'c'};

  • 创建方式:可以用 { } 或 set()函数创建;注意:创建空集合需要用set() 而不能用{},因为 {} 是用来创建空字典的;

  • 集合是无序的不重复元素序列。

2.5 Dictionary(字典):

  • 列表是有序的对象集合,字典是无序的对象集合;

  • 键值对表示;key必须使用不可变类型;

  • del dict['Name'] # 删除键 'Name';

  • dict.clear() # 清空字典;

  • del dict # 删除字典。

2.6 List(列表):

  • 嵌套列表:

>>>a = ['a', 'b', 'c']

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

>>> x = [a, n]

>>> x

[['a', 'b', 'c'], [1, 2, 3]]

>>> x[0]

['a', 'b', 'c']

>>> x0

'b'

3.运算符

3.1 is 和==的区别

  • is 用于判断两个变量引用对象是否为同一个;== 用于判断引用变量的值是否相等;

  • 对比java来看,可以粗略地看作:python中比较值,类似于Java中的equals;python中is比较引用,类似于Java中的。

3.2 随机数函数

  • choice(seq):从序列的元素中随机选一个元素。如random.choice(range(10)):从0-9中随机挑选一个整数;

  • randrange([start,] stop [,step]):返回指定递增基数集合中的一个随机数,基数缺省值为1;包含start,不包含stop;

  • random():随机生成一个实数,[0, 1)范围内;

  • uniform(x, y):生成一个指定范围内的随机符点数,在[x, y] 范围内;两个参数其中一个是上限,一个是下限,x可以小于y,也可以大于y;

  • randint(a, b):用于生成一个指定范围内的整数,参数a是下限,参数b是上限,a必须<=b,生成的随机数n: a <= n <= b;

  • shuffle(lst):将列表中元素随机排序;

4.条件控制

4.1 if语句

  • python中用 elif 代替 else if;格式为 if-elif-else;

  • 每个条件后面要用冒号 :

  • python中没有switch-case语句。

5.循环语句

  • python中的循环语句有:for,while;没有do..while。

5.1 while循环

  • while语句的形式如下:

while 判断条件:
    语句
  • 无限循环:可以通过设置条件表达式永远不为false来实现无限循环;

  • 可以用CTRL+C退出无限循环;

  • 无限循环在服务器上客户端的实时请求非常有用。

  • while循环可以使用while....else语句:在while条件语句为false时执行else模块。

5.2 for循环

  • Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

  • for循环一般格式如下:

for <variable> in <sequence>:
    <statements>
else:
    <statements>

5.3 range()函数

  • 需要遍历数字序列,可以使用内置range()函数。它会生成数列。

  • 实例1:

for x in range(5):
        print(x)

结果是 0 1 2 3 4

  • 实例2,用range指定区间的值(结果左闭右开):

for x in range(5,9):
        print(x)

结果是 5 6 7 8

  • 可以使range以指定数字开始并指定不同的增量(甚至可以是负数,即'步长');

  • 可以使用range()函数来创建一个列表:list(range(5)) # [0, 1, 2, 3, 4]

5.4 break,continue及循环中的else子句

  • break:可以跳出for和while的当前循环体;如果循环被break终止,则对应的else块也不会再执行;

  • continue:被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

5.5 pass语句

  • Python pass是空语句,是为了保持程序结构的完整性。

  • pass 不做任何事情,一般用做占位语句。

6.迭代器与生成器

6.1 迭代器

  • 迭代:是访问集合元素的一种方式;

  • 迭代器:是一个可以记住遍历的位置的对象;

  • 迭代器对象:从集合的第一个元素开始访问,直到所有元素被访问完结束。迭代器只能往前不能后退;

  • 迭代器:有2个基本方法,iter() 和 next();

  • 字符串,列表,元组对象:都可以创建迭代器;

  • 迭代器对象:可以用 for 循环进行遍历。

6.2 创建一个迭代器

  • 把一个类作为迭代器使用,需要在类中实现2个方法:iter(),next();

  • iter()返回一个特殊的迭代器对象,该对象实现了next()方法并通过StopIteration异常标识迭代的完成:raise StopIteration;

  • next()返回下一个迭代器对象(python2中为next());

6.3 生成器

  • 生成器(generator):即python中,使用了yield的函数;

  • 与普通函数不同,生成器是一个返回迭代器的函数,只能用于迭代操作;

  • 调用生成器运行过程中,每次遇到yield时函数会暂停并保存当前的所有运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行;

  • 调用一个生成器函数,返回的是一个迭代器对象。

7. 函数

7.1 参数传递

  • python中,类型属于对象,变量是没有类型的,变量只是一个对象的引用;

  • 传不可变对象:类似C++的值传递,如整数,字符串,元组。如a = 5;fun(a):传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,并不会影响a本身;

  • 传可变对象:类似C++的引用传递,如列表,字典。如la=[1,2],fun(la):是将la真正传过去,修改后fun外部的la也会受到影响。

7.2 参数

  • 必需参数:需要以正确顺序传入参数;调用时的数量需要和声明时一致;

  • 关键字参数:允许函数调用时参数顺序与声明时不一致,因为能用参数名匹配参数值;

  • 默认参数:调用函数时,如果没有传参,则会使用默认参数;

  • 不定长参数:函数声明时,加了 * 的参数会以元组的形式导入,存放所有未命名的变量参数;还有一种是带2个星号 ** 的参数,是以字典形式导入;

  • 声明函数时,参数中的 * 可以单独出现,如:def f(a,b,*,c);如果单独出现星号,则 * 后的参数必须用关键字传入,如:f(1,2,c=3);

7.3 匿名函数

  • 匿名函数:python用lambda 来创建匿名函数;不使用def 语句来定义;

  • lambda只是一个表达式,而非代码块;

  • lambda函数拥有自己的命名空间,不能访问自己参数列表之外或全局命名空间的参数;

  • 语法:lambda [arg1 [,arg2,.....argn]]:expression;如:sum = lambda arg1, arg2: arg1 + arg2。

7.4 变量作用域

7.4.1 python中的4种作用域

  • L (Local):局部作用域;

  • E (Enclosing):闭包函数外的函数中;

  • G(Global):全局作用域;

  • B(Bulit-in):内置作用域,即内置函数所在模块的范围;

  • 按照L-E-G-B的顺序查找;

  • B 内置作用域:通过名为bulitin的标准模块来实现,需要导入builtins文件才能使用:import builtins。

7.4.2 global和nonlocal关键字

  • 内部作用域要修改外部作用域的变量,则内部作用域内中要用global声明该变量;

  • 内部作用域要修改嵌套作用域(enclosing,外层非全局作用域)中的变量,则内部作用域内中要用nonlocal声明该变量。

8. 数据结构

8.1 列表

  • 列表的方法中,类似insert,remove,sort等修改列表的方法没有返回值;但是 pop([i]) 比较特殊,会返回移除的元素值;

  • list.pop([i]) :从列表指定位置移除元素,并返回元素值;不指定索引,则返回最后一个元素。(方法中 i 两边的方括号表示这个参数是可选的,而不是需要输入一对方括号)。

8.2 列表当堆栈用

  • 堆栈特点:先进后出,后进先出;

  • 用append() 方法可以把一个元素添加到堆栈顶;

  • 用不指定索引的pop() 方法可以把一个元素从堆栈顶释放出来。

8.3 列表当队列用

  • 队列特点:先进先出,后进后出;

  • 用列表当队列用,效率并不高。在列表最后添加或弹出元素速度快,但是在列表里插入或从头部弹出元素速度并不快(因为所有其他元素需要一个一个移动)。

  • 实例:

>>> from collections import deque
>>> queue = deque(['aaa','bbb','ccc'])
>>> queue.append('ddd')
>>> queue.append('eee')
>>> print(queue)
deque(['aaa', 'bbb', 'ccc', 'ddd', 'eee'])
>>> queue.popleft()
'aaa'
>>> queue.popleft()
'bbb'
>>> print(queue)
deque(['ccc', 'ddd', 'eee'])
>>> 

8.4 列表推导式

  • 列表推导式:提供了从序列创建列表的简单途径;

  • 列表推导式结构:由一对方括号所包含的以下内容:一个表达式,后面跟一个 for 子句,然后是零个或多个 forif 子句;

  • 列表推导式结果:其结果将是一个新列表,由对表达式依据后面的 forif 子句的内容进行求值计算而得出;

  • 如果希望表达式推导出一个元组,就必须使用括号()。

  • 实例:

>>> [x * 2 for x in [2,3]]
[4, 6]
>>> [(x,x**2) for x in [2,3,4] ]
[(2, 4), (3, 9), (4, 16)]
>>> [x for x in [2,3,4] if x >2]
[3, 4]
>>> [x+y for x in [1,2] for y in [35,6]]
[36, 7, 37, 8]
>>> 

8.5 嵌套列表解析

  • 实例:3X4的矩阵列表转换成4X3列表:。。。。

8.6 del语句

  • del语句:从列表中依索引而不是值来删除一个元素,不返回值;pop([i])会返回值;

  • del语句:可以从列表删除一个切割,或者清空整个列表,还可以删除实体变量;

  • 实例:

>>> a=[4,5,6,7,8,9]
>>> del a[1]
>>> a
[4, 6, 7, 8, 9]
>>> del a[1:3]
>>> a
[4, 8, 9]
>>> del a[:]
>>> a
[]
>>> del a
>>> a
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    a
NameError: name 'a' is not defined
>>> 

8.7 元组和序列

  • 元组:由若干逗号分隔的值组成;

  • 元组:输出时总有括号() 的;但是输入时可以有() 也可以没有();但是输入时,元组是更大表达式的一部分,则通常要加()。

8.8 集合

  • 集合也支持推导式:

>>> {x for x in 'abcddcba' if x not in 'ab'}
{'d', 'c'}
>>> 

8.9 字典

  • 字典推导可以创建任意键值的表达式字典:

>>> {x:x**2 for x in [1,2,3]}
{1: 1, 2: 4, 3: 9}
>>> {x:x**2 for x in (1,2,3)}
{1: 1, 2: 4, 3: 9}
  • 如果关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

>>> dict(aa=1,bb=2)
{'aa': 1, 'bb': 2}
>>> 

8.10 遍历技巧

  • 在字典中遍历时,关键字和值可以用items() 方法同时取出来;

  • 在序列中遍历时,索引位置和值可以用enumerate() 函数同时得到;

  • 同时遍历2个或更多序列,可以用zip() 组合;

  • 反向遍历一个序列,可以先指定序列,再用reversed() 函数;

  • 按顺序遍历一个序列,用sorted() 函数返回一个已排序的序列,并不修改原值。

9. 文件I/O

9.1 输入

  • raw_input([prompt]):从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符);

  • input([prompt]):可以接收一个python表达式作为输入,并将运算结果返回。

10. 错误和异常

10.1 异常处理

  • try/except:1个try语句可能包含多个except子句,分别处理不同特定的异常;最多只有1个分支被执行。

  • try/except..else:else可选,else子句在try子句没有发生任何异常时执行。

  • try/finally:无论是否异常,都会执行最后的代码

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号