参考:
40_Python面试100题-腾讯面试题-90-91题_哔哩哔哩_bilibili
一、python基础知识
(一)基础语法
1.标识符、关键字
2.同一行显示多条语句
用;号隔开
3.print输出
python3中print默认输出是换行的,如果要实现不换行需要在变量末尾加上 「, end= ' ’」
print(x, end='')
(二)基础数据类型
Python基本数据类型一般分为6种:数值(Numbers)、字符串(String)、列表(List)、元组(Tuple)、字典(Dictionary)、集合(Set)。
1.数值
Python支持四种不同的数值类型:
- int(有符号整型)
- float(浮点型)
- complex(复数)
2.字符串
字符串的两种取值顺序
[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符。
[头下标:尾下标:截取步长]
可以使用加号(+)对字符串进行连接,使用星号(*)对字符串进行重复操作。
find,rfind,strip
3.列表[ ]
索引从0开始
Python列表脚本操作符
Python列表函数方法
4.元组( )
与列表的区别:元组的元素不能修改,删除,但是可以拼接新的元组和删除整个元组。
元组运算符和列表相同
元组内置函数
5.字典{ key1 : value1, key2 : value2}
键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。
修改键值时可以直接赋值修改,添加时可以直接输入新的键名添加。
字典内置函数与方法
6.集合
可以使用大括号 { } 或者 set() 函数创建集合
两个集合间的运算
集合内置方法完整列表
添加元素:s.add( x ),
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作;s.update( x )
可以添加列表,元组,字典等。
移除元素:s.remove( x ),s.discard( x )
数据类型转换
list和tuple属于序列,可以使用下标访问,可以进行切片操作,可以排序。其区别:
1、list用[]定义,tuple用()定义
2、list是可变容器,可以修改其中的元素,tuple属于不可变容器,不能修改元素。
3、tuple属于不可变容器,没有深复制和浅复制,list有深复制和浅复制
4、list一般不做函数参数的默认值,tuple可以做函数参数的默认值
set和dict不属于序列,无序,不能通过下标访问,但set和dict也有区别:
1、dict可以通过key访问,set不行
2、dict键不可以重复,值可以重复,set不允许有重复元素
3、dict可以根据键修改值,set不能修改元素
3.运算符
(三)一些语句
if语句
if 条件:
语句
else:
语句
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
循环语句
while循环
while 判断条件(condition):
执行语句(statements)……
for循环
空心等边三角形
rows = int(input('输入列数(即三角形的高度):'))
for i in range(1, rows + 1): # 从1开始,因为第一行没有前导空格
# 打印前导空格
print(' ' * (rows - i), end='')
# 打印星号
if i == 1 or i == rows: # 顶部和底部行
print('*' * (2 * i - 1))
else:
# 两侧星号
print('*', end='')
print(' ' * (2 * (i - 1) - 1), end='') # 中间空格
print('*')
break语句
break语句用来终止循环语句
continue语句
continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环(而break是跳出整个循环)
pass语句
-
占位作用:当你编写一个函数或类,但还没有实现具体功能时,可以使用
pass
语句作为占位符,以避免语法错误。 -
控制流程:在循环或条件语句中,
pass
语句可以用作空的执行体,使得控制流程继续。
(四)函数
Python3 函数 | 菜鸟教程 (runoob.com)
1.函数的调用 函数名(参数)
2.参数传递
在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的:
比如:
a=[1,2,3] a="Runoob"
[1,2,3] 是 List 类型,"Runoob" 是 String 类型,而变量 a 是没有类型,它仅仅是一个对象的引用(一个指针),可以是指向 List 类型对象,也可以是指向 String 类型对象。
可变更对象和不可变更对象:
strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
-
不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。
-
可变类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
-
不可变类型:类似 C++ 的值传递,如整数、字符串、元组。如 fun(a),传递的只是 a 的值,没有影响 a 对象本身。如果在 fun(a) 内部修改 a 的值,则是新生成一个 a 的对象。
-
可变类型:类似 C++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响。
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
python 传不可变对象
def change(a):
print(id(a)) #查看内存地址 指向的是同一个对象
a=10
print(id(a)) # 一个新对象
a=1
print(id(a))
change(a)
输出:
4379369136 4379369136 4379369424
可以看见在调用函数前后,形参和实参指向的是同一个对象(对象 id 相同),在函数内部修改形参后,形参指向的是不同的 id。
python 传可变对象
可变对象在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。
# 可写函数说明
def changeme( mylist ):
"修改传入的列表"
mylist.append([1,2,3,4])
print ("函数内取值: ", mylist)
return
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print ("函数外取值: ", mylist)
传入函数的和在末尾添加新内容的对象用的是同一个引用:输出:
函数内取值: [10, 20, 30, [1, 2, 3, 4]] 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
3.参数
调用函数时可使用的正式参数类型:
- 必需参数、
- 关键字参数
- 默认参数
- 不定长参数
4.匿名函数
Python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
5.return语句
6.强制位置参数
/ 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
#形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 和 f 要求为关键字形参
(五)面向对象
Python3 面向对象 | 菜鸟教程 (runoob.com)
基础概念
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。