昨天去面试,这5个Python面试题都被考到了,Python面试题No6

第1题:字符串的拼接–如何高效的拼接两个字符串?

字符串拼接的几种方法

  1. 加号
  2. 逗号
  3. 直接连接
  4. 格式化
  5. join
  6. 多行字符串拼接()

加号

print('Python' + 'Plus')

逗号

print("Hello", "Python")

直接连接

print("Hello" "Python")

格式化

print('%s %s'%('Python', 'PLUS'))

join

str_list = ['Python', 'Plus']
a = ''
print(a.join(str_list))

多行字符串拼接()

sql = ('select *'
     'from users'
     'where id=666')
print(sql)
一般情况,大家比较喜欢用“+”拼接字符串,但是这个方法并不是高效的,
因为如果需要拼接的字符串有很多(n个)的情况下,
使用”+”的话,python解释器会申请n-1次内存空间,
然后进行拷贝,因为字符串在python中是不可变的,
所以当进行拼接的时候,会需要申请一个新的内存空间。
所以,正确答案是,使用.join(list),因为它只使用了一次内存空间

第2题: list = [‘a’,‘a’,‘a’,1,2,3,4,5,‘A’,‘B’,‘C’]提取出”12345”?

这个考点考了python的解压赋值的知识点,即 a,b,c,*middle,d,e,f = list, *middle = [1,2,3,4,5]。

注意,解压赋值提取出来的是列表

list = ['a','a','a',1,2,3,4,5,'A','B','C']
a,b,c,*middle,d,e,f = list
print(middle)
print(type(middle))

第3题: 什么是pickling和unpickling?

为了让用户在平常的编程和测试时保存复杂的数据类型,python提供了标准模块,称为pickle
这个模块可以将几乎任何的python对象(甚至是python的代码),转换为字符串表示,这个过程称为pickling
从存储的字符串中检索原始Python对象的过程称为unpickling

第4题: 说一说Python自省?

在python中,检查某些事物以确定它是什么、它知道什么以及它能做什么。

自省向程序员提供了极大的灵活性和控制力。

说的更简单直白一点:自省就是面向对象的语言所写的程序在运行时,能够知道对象的类型。简单一句就是,运行时能够获知对象的类型。

例如python, buby, object-C, c++都有自省的能力,这里面的c++的自省的能力最弱,只能够知道是什么类型,而像python可以知道是什么类型,还有什么属性。

Python中比较常见的自省(introspection)机制(函数用法)有: dir()type(), hasattr(), isinstance(),通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个属性,访问对象的属性。

  1. dir() 函数是 Python 自省机制中最著名的部分了。它返回传递给它的任何对象的属性名称经过排序的列表。如果不指定对象,则 dir() 返回当前作用域中的名称。
  2. type() 函数有助于我们确定对象是字符串还是整数,或是其它类型的对象。
  3. 对象拥有属性,并且 dir() 函数会返回这些属性的列表。但是,有时我们只想测试一个或多个属性是否存在。如果对象具有我们正在考虑的属性,那么通常希望只检索该属性。这个任务可以由 hasattr() 和 getattr() 函数来完成。
  4. isinstance() 函数测试对象,以确定它是否是某个特定类型或定制类的实例。

其他可以参考博客:https://blog.csdn.net/qq_34979346/article/details/83218262

第5题:什么是python猴子补丁python monkey patch?

monkey patch (猴子补丁)
用来在运行时动态修改已有的代码,而不需要修改原始代码。

在Python中,术语monkey补丁仅指run-time上的类或模块的动态修改

>>> class A:
	    def func(self):
	        print("Hi")
>>> def monkey(self):
		print("Hi, monkey")
>>> A.func = monkey
>>> a = A()
>>> a.func()
Hi, monkey

公众账号

微信搜索htmlhttp就能找到不一样的精彩

将SQL中的递归CTE(Common Table Expression)转换为Python代码可以使用循环或递归来实现。以下是一个示例,展示了如何将该SQL递归逻辑转换为Python代码: ### Python 代码 ```python import pandas as pd # 模拟数据 data = [ # 示例数据行 { "ConjTkt_First_TktID": "12345", "Seg_Dpt_Airpt": "PEK", "Seg_Arrv_Airpt": "CAN", "rn": 1, # 其他字段可以根据需要添加 }, # 更多数据行... ] df = pd.DataFrame(data) def process_row(row, df): result = { "ConjTkt_First_TktID": row["ConjTkt_First_TktID"], "Seg_Dpt_Airpt": row["Seg_Dpt_Airpt"], "Seg_Arrv_Airpt": row["Seg_Arrv_Airpt"], "Pax_Airpt_Str": f"{row['Seg_Dpt_Airpt']}-{row['Seg_Arrv_Airpt']}", "Airpt_Attri_Str": "", # 初始化为空字符串,后续填充 "Route_Dpt_Airpt": row["Seg_Dpt_Airpt"], "Route_Dpt_Airpt_Cn": "", "Route_Dpt_Dept": "", "Hub_Airpt": "", "Hub_Airpt_URC": "", "Is_In_URC": "0", "Is_In_High_Airpt": "0", "Is_Long_Route": "0", "Is_No6_Sign": "0", "tmp_Airpt": "", "rn": row["rn"] } # 处理 Airpt_Attri_Str 和其他字段 # 这里假设有一个函数 get_airport_attributes 来获取机场属性 airpt_attr_str = get_airport_attributes(row["Seg_Dpt_Airpt"], row["Seg_Arrv_Airpt"]) result["Airpt_Attri_Str"] = airpt_attr_str # 处理其他复杂逻辑 # ... return result def recursive_process(df): results = [] for _, row in df.iterrows(): if row["rn"] == 1: result = process_row(row, df) results.append(result) else: prev_row = df[(df["ConjTkt_First_TktID"] == row["ConjTkt_First_TktID"]) & (df["rn"] == row["rn"] - 1)] if not prev_row.empty: prev_result = results[-1] new_result = process_row(row, df) new_result["Pax_Airpt_Str"] = update_pax_airpt_str(prev_result["Pax_Airpt_Str"], row["Seg_Dpt_Airpt"], row["Seg_Arrv_Airpt"]) new_result["Airpt_Attri_Str"] = update_airpt_attr_str(prev_result["Airpt_Attri_Str"], row["Seg_Dpt_Airpt"], row["Seg_Arrv_Airpt"]) # 更新其他字段 # ... results.append(new_result) return results def update_pax_airpt_str(pax_airpt_str, seg_dpt_airpt, seg_arrv_airpt): if pax_airpt_str.endswith(seg_dpt_airpt): return f"{pax_airpt_str}-{seg_arrv_airpt}" else: return f"{pax_airpt_str}/{seg_dpt_airpt}-{seg_arrv_airpt}" def update_airpt_attr_str(airpt_attr_str, seg_dpt_airpt, seg_arrv_airpt): # 获取新的机场属性 new_attr_str = get_airport_attributes(seg_dpt_airpt, seg_arrv_airpt) if airpt_attr_str.endswith(seg_dpt_airpt): return f"{airpt_attr_str}-{new_attr_str}" else: return f"{airpt_attr_str}/{new_attr_str}" def get_airport_attributes(dpt_airpt, arrv_airpt): # 假设有一个函数来获取机场属性 # 返回格式为 "D-I" 或类似的字符串 return "D-I" # 调用递归处理函数 results = recursive_process(df) # 将结果转换为 DataFrame result_df = pd.DataFrame(results) print(result_df) ``` ### 解释 1. **数据准备**:首先创建一个模拟的数据集 `df`,其中包含一些示例数据行。 2. **处理单行**:定义 `process_row` 函数来处理单个数据行,并初始化结果字典。 3. **递归处理**:定义 `recursive_process` 函数来递归处理数据行。对于每个 `rn` 为 1 的行,直接调用 `process_row`。对于 `rn` 不为 1 的行,找到前一行的结果并更新当前行的值。 4. **更新字段**:定义 `update_pax_airpt_str` 和 `update_airpt_attr_str` 函数来更新 `Pax_Airpt_Str` 和 `Airpt_Attri_Str` 字段。 5. **获取机场属性**:定义 `get_airport_attributes` 函数来获取机场属性,这里只是一个示例,实际应用中需要根据实际情况实现。 6. **调用递归处理**:调用 `recursive_process` 函数并打印结果。 这个示例代码展示了如何将SQL递归逻辑转换为Python代码的基本思路。具体实现可能需要根据实际数据和业务逻辑进行调整。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值