Python面试宝典之基础篇-03

题目011:Python中为什么没有函数重载?

点评:C++、Java、C#等诸多编程语言都支持函数重载,所谓函数重载指的是在同一个作用域中有多个同名函数,它们拥有不同的参数列表(参数个数不同或参数类型不同或二者皆不同),可以相互区分。重载也是一种多态性,因为通常是在编译时通过参数的个数和类型来确定到底调用哪个重载函数,所以也被称为编译时多态性或者叫前绑定。这个问题的潜台词其实是问面试者是否有其他编程语言的经验,是否理解Python是动态类型语言,是否知道Python中函数的可变参数、关键字参数这些概念。

首先Python是解释型语言,函数重载现象通常出现在编译型语言中。其次Python是动态类型语言,函数的参数没有类型约束,也就无法根据参数类型来区分重载。再者Python中函数的参数可以有默认值,可以使用可变参数和关键字参数,因此即便没有函数重载,也要可以让一个函数根据调用者传入的参数产生不同的行为。

题目012:用Python代码实现Python内置函数max。

点评:这个题目看似简单,但实际上还是比较考察面试者的功底。因为Python内置的max函数既可以传入可迭代对象找出最大,又可以传入两个或多个参数找出最大;最为关键的是还可以通过命名关键字参数key来指定一个用于元素比较的函数,还可以通过default命名关键字参数来指定当可迭代对象为空时返回的默认值。

下面的代码仅供参考:

def my_max(*args, key=None, default=None):

""" 获取可迭代对象中最大的元素或两个及以上实参中最大的元素 :param args: 一个可迭代对象或多个元素 :param key: 提取用于元素比较的特征值的函数,默认为None :param default: 如果可迭代对象为空则返回该默认值,如果没有给默认值则引发ValueError异常 :return: 返回可迭代对象或多个元素中的最大元素 """

if len(args) == 1 and len(args[0]) == 0:

if default:

return default

else:

raise ValueError('max() arg is an empty sequence')

items = args[0] if len(args) == 1 else args

max_elem, max_value = items[0], items[0]

if key:

max_value = key(max_value)

for item in items:

value = item

if key:

value = key(item)

if value > max_value:

max_elem, max_value = item, value

return max_elem

题目013:写一个函数统计传入的列表中每个数字出现的次数并返回对应的字典。

点评:送人头的题目,不解释。

def count_letters(items):

result = {}

for item in items:

if isinstance(item, (int, float)):

result[item] = result.get(item, 0) + 1

return result

也可以直接使用Python标准库中collections模块的Counter类来解决这个问题,Counter是dict的子类,它会将传入的序列中的每个元素作为键,元素出现的次数作为值来构造字典。

from collections import Counter

def count_letters(items):

counter = Counter(items)

return {key: value for key, value in counter.items() \

if isinstance(key, (int, float))}

题目014:使用Python代码实现遍历一个文件夹的操作。

Python标准库os模块的walk函数提供了遍历一个文件夹的功能,它返回一个生成器。可以通过这个生成器来获得文件夹下所有的文件和文件夹。

import os

g = os.walk('/Users/Hao/Downloads/')for path, dir_list, file_list in g:

for dir_name in dir_list:

print(os.path.join(path, dir_name))

for file_name in file_list:

print(os.path.join(path, file_name))

说明:os.path模块提供了很多进行路径操作的工具函数,在项目开发中也是经常会用到的。

题目015:现有2元、3元、5元共三种面额的货币,如果需要找零99元,一共有多少种找零的方式?

点评:还有一个非常类似的题目:“一个小朋友走楼梯,一次可以走1个台阶、2个台阶或3个台阶,问走完10个台阶一共有多少种走法?”,这两个题目的思路是一样,如果用递归函数来写的话非常简单。

from functools import lru_cache

@lru_cache()def change_money(total):

if total == 0:

return 1

if total < 0:

return 0

return change_money(total - 2) + change_money(total - 3) + change_money(total - 5)

说明:在上面的代码中,我们用lru_cache装饰器装饰了递归函数change_money,如果不做这个优化,上面代码的渐近时间复杂度将会是

,而如果参数total的值是99,这个运算量是非常巨大的。lru_cache装饰器会缓存函数的执行结果,这样就可以减少重复运算所造成的开销,这是空间换时间的策略,也是动态规划的编程思想。

温馨提示:Python面试宝典会持续更新,从基础到项目实战的内容都会慢慢覆盖到。虽然每天只更新5个题目,但是每道题扩散出的信息量还是比较大的,希望对找工作的小伙伴所有帮助。你的点赞、收藏和评论都是我继续创建的动力,请不要吝惜你的赞美。

python程序员面试算法宝典 pdf_Python面试宝典之基础篇3相关推荐

  1. 程序员学习算法,有这样几本基础书

    什么是算法呢?它是一组具有良好定义的规则(或者说是一种配方),可以有效地解决一些计算方面的问题.我们可能要处理一大串数字,需要对它们进行重新整理,使它们按顺序排列:我们可能需要在地图上计算从某个起点到 ...

  2. 黑马程序员C++学习笔记<第一阶段_基础篇>

    配套视频网址: 黑马程序员:http://yun.itheima.com/course/520.html?bili B站:https://www.bilibili.com/video/BV1et411 ...

  3. 程序员的算法趣题Q50: 完美洗牌

    目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...

  4. python程序员面试算法宝典pdf-Python程序员面试笔试宝典

    本书是一本讲解Python程序员面试笔试的百科全书,在写法上,除了讲解如何解答Python程序员面试笔试问题以外,还引入了相关知识点辅以说明,让读者能够更加容易理解.本书将Python程序员面试笔试过 ...

  5. python程序员工作怎样-python程序员怎样在面试过程中展现自己的基本功

    原标题:python程序员怎样在面试过程中展现自己的基本功 当下我国人工智能招聘岗位需求不多,不过后期的发展潜力巨大,而且python程序员的薪资待遇并不比Java程序员的差,Python程序员往往都 ...

  6. python程序员怎么面试_Python程序员面试,这些问题你必须提前准备!

    近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重对待的事情,如下是 ...

  7. Python程序员面试必备常用问题答案及解析

    源 | 小象     文 | 水木华章 在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案 ...

  8. Python程序员面试,这些问题你必须提前准备!

     水木华章 小象 近些年随着Python语言越来越流行,越来越多的人选择Python语言作为自己的职业方向.如何在心仪公司的面试中获得好成绩,并最终成功获得offer是每一个Python开发者都要慎重 ...

  9. 好程序员Python培训分享Python程序员面试技巧

    好程序员Python培训分享Python程序员面试技巧,往年的这个时候,"金三银四"的招聘热潮已经扑面而至.今年,因为疫情的影响,各大公司的社招可能跟"2002的第一场雪 ...

  10. 面试官吐槽:“Python程序员就是不行,”网友:我能把你面哭信不

    近两年,Python一下子火了起来,很多公司都想赶上这"一下子"的热潮,招聘到大牛人才.但是,最近一个HR在社交网站的吐槽又火了: 那么问题来了,市面上为什么鲜有企业满意的优秀的P ...

最新文章

  1. Python中os和shutil模块实用方法集锦
  2. 第十六届智能车竞赛开源云台设计
  3. 那些年我们排过的序之希尔排序
  4. Bitmap Cache
  5. LINQ系列:LINQ to ADO.NET概述
  6. 支付业务流程图--扫码付
  7. wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...
  8. Android笔记 消息机制handler+http之 网络图片浏览器demo
  9. json-lib javabean转换为首字母大写的json串
  10. Delphi各个版本的官方下载地址
  11. 双线性的定义以及他的性质
  12. Arcgis Server服务中rest服务和wms服务的对应关系
  13. 完美解决Tensorflow不支持AVX2指令集问题|指令集加速
  14. C++实践参考——动物这样叫
  15. React之Protals详解
  16. Excel删除指定列(VB)
  17. [Computer Architecture读书笔记] 3.2 Basic Compiler Techniques for Exposing ILP
  18. 文件或目录损坏且无法读取/此卷不包含可识别的文件系统等无法访问错误-CHKDSK被中止-硬盘问题(二)
  19. Mac电脑待机长时间离开后自动退出登录和关机的解决方法
  20. 【指纹识别】指纹识别门禁系统【含GUI Matlab源码 1692期】

热门文章

  1. 关于黑苹果系统的耳机声音模糊不清问题
  2. maven插件加载依赖的类
  3. Nifty Gateway与区块链技术:探索数字艺术的革命
  4. 怎样用Photoshop做出爆炸效果
  5. cocos creator 模拟纸飞机运动动画
  6. 我的E家无线路由器设置无法上网解决办法之一。
  7. Linux搭建各种常用服务器(详细)
  8. oracle权限分几种类型,Oracle权限和数据类型
  9. RayVentory更智能的软件和硬件库存
  10. 物联网浪潮下,物流产业如何再“进化”?