Python面试总结篇
Python Coding Interview Questions and Answers
面试题一:逻辑运算赋值
v1 = 1 or 9
v2 = 0 or 9
# print(v1, v2)会输出什么?
我们先举例理解 数字/字符串
和 布尔值
是如何转换的
数字转布尔值
v1 = 0
v2 = bool(v1)
print(v2) # ---> False
# 总结:只有0转换成布尔值是False,其它都是True。
字符串转布尔值
v1 = ""
v2 = bool(v1)
print(v2) # ---> False
# 总结:只有空字符串转换成布尔值是False,其他都是True。
也可以把以下数据类型转换为布尔值
bool([]) # 空列表是False,非空列表是True。空集合也是False。
bool(()) # 空元组是False,非空元组是True
bool({}) # 空字典是False,非空字典是True
bool(set()) # 空集合是False,非空集合是True
bool(None) # False
- 布尔值转数字或者字符串使用非常少,了解即可。转换为数字只有0(False)和1(True),转换为字符串只有空字符串("")和字符串("True")。
然后我们再来看这个面试题
```python
v1 = 1 or 9
v2 = 0 or 9
# print(v1, v2)会输出什么?
解: 当和逻辑运算符一起存在时会自动转换为布尔值,根据上面的例子得知,1是True,9也是True,0是False,v1取到第一个值等式就成立了,v2中因为0是False所以还需要继续看后面的值,所以输出1 9 ,v1和v2都为整型。
扩展
v1 = 3>4 or 4<3 and 1==1
print(v1) # ---> False,有比较运算,先比较是True还是False,再做逻辑运算
v2 = 1 and 9 or "" and 6
print(v2) # ---> 9
# 在没有()的情况下not优先级高于and,and优先级高于or,即优先级关系为( ) > not > and > or,同一优先级从左往右计算。
参考如下:
Operation | Result |
---|---|
x or y | if x is false, then y, else x |
x and y | if x is false, then x, else y |
not x | if x is false, then True , else False |
由此引出Python运算符优先级,以下表格列出了优先级从高到低的所有运算符。
运算符 | 描述 |
---|---|
** |
指数(最高优先级) |
~ + - |
按位翻转,一元加号和减号(最后两个的方法名为 +@和 -@) |
* / % // |
乘,除,取模和取整数 |
+ - |
加法、减法 |
>> << |
右移、左移运算符 |
& |
位'AND' |
^ | |
位运算符 |
<= < > >= |
比较运算符 |
<> == != |
等于(判断)运算符,其中<> 为不等于 ,类似!= ,在python 3中已剔除。 |
= %= /= //= -= += *= **= |
赋值运算符 |
is is not |
身份运算符 |
in not in |
成员运算符 |
not and or |
逻辑运算符,其优先级从高到底依次为 not > and > or |
面试题二:字符串反序
value = 'abcdefg'
# 把value的值反序,输出结果为"gfedcba"
这里涉及到的知识点是字符串的公共方法中切片和步长, 先举一个字符串切片的例子:
name = "Joney"
print(name[0:3]) # 输出结果是 Jon,这就是字符串切片,获取字符串中一部分字符,更专业的说法是获取子序列。
# 字符串是一个有序的字符集合,索引下标从0开始往右顺序访问。
# 字符串切片其中一个特点是顾首不顾尾,获取方式是 0 =< x < 3,x为切片的结果。
# name[:]输出结果是"Joney",即表示为正无穷和负无穷。
# name[-1]表示最后一个字符y,或者name[-1:]。
再来看一个字符串切片中步长的例子:
name = "JoneyHsiao"
print(name[0:8:2]) # 输出结果是 Jnys, 后面的:2就是步长。
# 意思就是下标值从0开始( 0 =< x < 8),从左往右按顺序每取一个值下标就+2,即下标分别为0,0+2,2+2=4,4+2=6。
# 默认步长是1,这里特别要注意是默认情况下是从左往右按顺序获取。
# 那么能不能从右往左获取呢?答案是可以的。特例:name[-1:0]获取不到子序列,因为是从左往右,无集合。
# 从右往左只需要把步长设置为负值(例如:-1)就可以。
# 例如:name[-1:0:-2],即从右往左(-1 =< x < 0),以步长2获取子序列,输出结果是"oiHeo"。
最后我们来分析面试题:
# 我们已经知道可以用切片的方式输出整个字符串,这是从左往右取负无穷和正无穷
name = "abcdefg"
print(name[:])
# 那么反过来,我们就可以从右往左取负无穷和正无穷
print(name(::-1)) # 输出结果就是反序"gfedcba"
面试题三:Git常用命令
git init
git status
git log
git add .
git commit -m "commit"
git push origin master
面试题四:你是怎么用git做开发的?
在码云、GitHub或GitLab等代码托管平台创建仓库,创建完之后得到一个仓库地址。
编写代码中 .....
将已编写好的代码提交到远程仓库。
初始化
进入一个任意文件夹,文件名最好和远程仓库名称一致
git init
git config --global user.name "joneyhsiao"
git config --global user.email "joneyhsiao@sina.com"
git remote add origin https://gitee.com/joneyhsiao/OxusLog.git
注意:至此git已经将该文件夹管理起来,以后此文件夹有任何变化,git都会检测到(使用 git status 命令可以查看状态)
代码收集并提交
- git status
- git add .
- git commit -m ''记录"
- git push origin master # 将本地文件夹下的内容同步到远程仓库。
修改代码或删除文件等对本地文件夹下任何文件做操作。
- git status
- git add .
- git commit -m ''记录"
- git push origin master # 将本地文件夹下的内容同步到远程仓库。
【避免】如果远程有本地没有的代码,必须先执行:【可能引发合并问题】
- git pull origin master
- git status
- git add .
- git commit -m ''记录"
- git push origin master # 将本地文件夹下的内容同步到远程仓库。
面试题五:元组书写规范 -> 必须要有逗号
v1 = 1
v2 = (1)
v3 = (1,)
v4 = ()
print(type(v1), type(v2), type(v3))
# <class 'int'> <class 'int'> <class 'tuple'>
# (1) 是整型,如果最后不加逗号则括号内就是对应的数据类型,v1 等价于 v2
# dialog = "This is %s speaking." % (joney,) 最后加上逗号才是元组,如果不加逗号这里就是字符串
print(type(v4))
# <class 'tuple'>
# 附例:
score = '80 '
int(score) # 可直接转换为整型
score.isdigit() # False 因为有空格
score.strip().isdigit() # True 移除空格
面试题六:集合的关系运算(交集 / 合集 / 差集 / 对称差集 / 包含关系)
交集
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
print(a.intersection(b)) # {3, 4}
# 或
print(a & b) # {3, 4}
合集,也叫并集(合并去重)
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
print(a.union(b)) # {1, 2, 3, 4, 5, 6, 7}
# 或
print(a | b) # {1, 2, 3, 4, 5, 6, 7}
差集
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
# 只存在于 a ,但不存在于 b
print(a.difference(b)) # {1, 2}
# 或
print(a - b) # {1, 2} # 只存在于 b ,但不存在于a
print(b - a) # {5, 6, 7}
对称差集
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
# 只存在于 a 或只存在于 b
print(a.symmetric_difference(b)) # {1, 2, 5, 6, 7}
print(a ^ b) # {1, 2, 5, 6, 7}
包含关系
in / not in:判断某元素是否在集合内
== / !=:判断两个集合是否相等
两个集合之间一般有如下几种关系:
相交 和 不相交
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
print(a.isdisjoint(b)) # False。判断 a 和 b 两个集合是不是不相交
包含 和 不包含
a = {1, 2, 3, 4}
b = {3, 4, 5, 6, 7}
print(a.issuperset(b)) # False。判断 a 是否包含 b,等同于 a >= b
print(a.issubset(b)) # False。判断 a 是否被 b 包含,等同于 a <= b
面试题七: ==
和 is
有什么区别?
运算符 | 类型 | 描述 | 实例 |
---|---|---|---|
== | 比较运算 | 等于, 比较(判断)对象是否相等 | a == b,如果两对象相等则返回True,否则返回False |
is | 身份运算 | is 是判断两个标识符是不是引用自一个对象 | x is y,类似 id(x) == id(y),如果引用的是同一个对象则返回True,否则返回False |
is not | 身份运算 | is not 是判断两个标识符是不是引用自不同对象 | x is not y,类似id(a) != id(b),如果引用的不是同一个对象则返回结果True,否则返回False |
v1 = [1, 2, 3]
v2 = [1, 2, 3, 4]
v1 == v2 # False
v1 is v2 # False
v1 = [1, 2, 3]
v2 = [1, 2, 3]
v1 == v2 # True
v1 is v2 # False
v1 = [1, 2, 3]
v2 = v1
v1 == v2 # True
v1 is v2 # True
# 出于节省内存的角度思考,Python 对部分简单的字符串和数字(小数据池)(-5 =< x < 257)做了特殊的缓存内存地址优化机制,python解释器因要定义的新变量内容与之前定义过的变量内容相同而不会让新变量占用新的内存空间。
v1 = 'joney'
v2 = 'joney' # 按理 v1 和 v2 应该是不同的内存地址
v1 == v2 # True
v1 is v2 # True,内存地址相同
总结:
- == 比较值是否相等
- is 比较内存地址是否相等
TODO 面试题八:什么是深浅拷贝?
TODO 面试题九:Python 2 和 Python 3 的区别
以下这几点区别可以不说,因为是最基础的知识,并不是考察的知识点。
默认解释器编码,python2 -> ASCII,python3 -> UTF-8
输入输出,python2 -> print "" / raw_input(),python3 -> print() / input()
整数的除法。python2只保留整数位,如果要保留小数位,需要导入一个模块。python3正常。
from __future__ import division
value = 3 / 2
python2 -> int / long,python3 -> int
面试题十:列举 Python 的数据类型中都有哪些方法?
整型 int
python2 -> int / long,python3 -> int
整数的除法。python2只保留整数位,如果要保留小数位,需要导入一个模块。python3正常。
from __future__ import division
value = 3 / 2
强制转换:
- int('字符串') 【重要】
- int(布尔值)
布尔值 bool
强制转换:
bool(0) # 只有0转换成布尔值是False,其它都是True。
bool("") # 只有空字符串转换成布尔值是False,其他都是True。
bool([]) # 空列表是False,非空列表是True。空集合也是False。
bool(()) # 空元组是False,非空元组是True
bool({}) # 空字典是False,非空字典是True
bool(set()) # 空集合是False,非空集合是True
bool(None) # False
字符串 str
独有方法:upper/lower/split/strip/replace/isdigit/startswith/endswith/format/join/encode
公共方法:
- len / 索引 / 切片 / 步长 / for循环 / 删除【无】 / 更新【无】
强制转换:
str(999) # "999"
str(True) # "True"
str(["Joney",'Hsiao']) # "['Joney', 'Hsiao']"
",".join(["Joney",'Hsiao']) # 'Joney,Hsiao' 循环每个元素,元素必须是字符串。 # 如果元素是数字,可以使用列表推导,将 int 转换为 str
v1 = ["Joney",'Hsiao', 18]
v2 = [str(i) for i in v1] # ['Joney', 'Hsiao', '18']
",".join(v2) # 'Joney,Hsiao,18' # 或
nums = [11, 22, 33, 44]
for i in range(0, len(nums)):
nums[i] = str(nums[i])
result = '_'.join(nums)
print(result)
列表 list
独有方法:append/insert/pop/remove/clear/extend/reverse/sort
公共方法:
- len / 索引 / 切片 / 步长 / for循环 / 删除 / 更新
强制转换:
list("Joney")
v1 = list("Joney")
print(v1) # ['J', 'o', 'n', 'e', 'y']
list( (11,22,33,44,) )
v1 = list( (11,22,33,44,) )
print(v1) # [11, 22, 33, 44]
元组 tuple
独有方法【无】
公共方法:
- len / 索引 / 切片 / 步长 / for循环 / 删除【无】 / 更新【无】
强制转换:
tuple('Joney')
v1 = tuple('Joney')
print(v1) # ('J', 'o', 'n', 'e', 'y')
tuple([11,22,33,44])
v1 = tuple([11,22,33,44])
print(v1) # (11, 22, 33, 44)
字典 dict
- 独有方法:keys/values/items/get/pop/update
- 公共方法:
- len / 索引 / 切片【无】 / 步长【无】 / for循环 / 修改(存在就修改/不存在就增加) / 删除
集合 set
- 独有方法:add / discard / update / intersection / union / difference / symmetric_difference
- 公共方法:len / for循环 / 索引【无】 / 步长【无】 / 切片【无】 / 删除【无】 / 修改【无】
持续更新
Python面试总结篇的更多相关文章
- Python面试基础篇
1. 为什什么学习Python? Life is short, You need Python 2. 通过什什么途径学习的Python? pass 3. Python和Java.PHP.C.C#.C+ ...
- Python面试 【315+道题】
Python面试 [315+道题] 第一部分 Python基础篇(80题) 为什么学习Python? 因为看到python的发展趋势,觉得需要与时俱进,第一点,python开发速度极快,能快速完成一个 ...
- python面试笔试题汇总
Python面试攻略(嗨谈篇) 110道python面试笔试题汇总,你能答对几道? Python 面试问答 Top 25 2018 年最常见的 Python 面试题 & 答案
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- Python面试简介及并行并发
今天的分享内容大体如下: 一. 面试 1. 什么是面试 2. 优秀的面试 二. Python综述 1. Python设计哲学及版本变迁 2. Python发展现状及其他语言使用场景 3. GIL 4. ...
- Python 面试问题
Python 面试问题 最近正在团队内部普及 Python 语言,有些刚接触 Python 语言的工程师在概念上有很多混淆的地方,刚好看到这篇文章:Python面试问题,里面列举的问题都是关于 Pyt ...
- Python面试2未完待续
Python面试重点(基础篇) 注意:只有必答题部分计算分值,补充题不计算分值. 第一部分 必答题(每题2分) 简述列举了解的编程语言及语言间的区别? c语言是编译型语言,运行速度快,但翻译时间长py ...
- Python面试真题答案或案例
Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...
- 10个Python面试常问的问题
概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的 ...
随机推荐
- .net持续集成sonarqube篇之sonarqube安装与基本配置
系列目录 Sonarqube下载与安装 Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装 ...
- C#3.0新增功能05 分部方法
连载目录 [已更新最新开发文章,点击查看详细] 分部类或结构可以包含分部方法. 类的一个部分包含方法的签名. 可以在同一部分或另一个部分中定义可选实现. 如果未提供该实现,则会在编译时删除 ...
- [leetcode] 20. Valid Parentheses (easy)
原题链接 匹配括号 思路: 用栈,遍历过程中,匹配的成对出栈:结束后,栈空则对,栈非空则错. Runtime: 4 ms, faster than 99.94% of Java class Solut ...
- python检测是否是质数
python检测是否是质数 编写python脚本,使得实现以下功能: 输入一个整数,通过脚本判断出输入的这个数是否是质数,然后输出是否是质数. 脚本如下图所示: Num = input("P ...
- 如何在 Centos7 中安装 Mysql 5.7
一.下载安装包 (1). 下载MySQL源码 (进入/usr/local/src目录,使用wget下载) cd /usr/local/src wget https://dev.mysql.com/ge ...
- asn1 学习笔记
语法 定义 Name ::= type 定义一个名称为“Name”的元素 它是一个给定ASN.1类型“Type”的实例 MyName ::= IA5String //IA5String(类似于ASCI ...
- Maven重新下载未下载完成的jar包
使用maven下载jar包,经常会遇到下载失败的情况,如果失败的jar包过多,或是不清楚到底有那些jar包在下载过程中出现了问题.可通过maven命令重新批量下载未成功的jar包. 1,打开cmd , ...
- netty源码解解析(4.0)-16 ChannelHandler概览
本章开始分析ChannelHandler实现代码.ChannelHandler是netty为开发者提供的实现定制业务的主要接口,开发者在使用netty时,最主要的工作就是实现自己的ChannelHan ...
- Pyinstaller 打包工具的使用!!!
打包成一个文件夹: pyinstaller xxx.py 打包成单个文件: pyinstaller -F xxx.py 打包成不显示终端的单个文件: pyinstaller -F -w xxx.py ...
- maven的编译规范
maven的中央仓库上的jar的包名必须小写.否则maven编译不通过. 如:Memcached-Java-Client-3.0.2 的jar包. 目录如下: com.whalin.memcached ...