Python 初学者进阶的九大技能,Python 校招面试指南
敏锐的学习者会查看`str()`所提供的内容,但也可以不查看 `str()`文档继续编程。 查看函数或过程文档可以通过调用 `help(str)` 或者`dir(str)`来实现。执行此操作时,你可能会发现一些并不知道的方法,也许你在查看`str()`时,找到有个名叫 `endswith()` 的方法,或许能用在某处。 ![在这里插入图片描述](https://static001.geekbang.org/infoq/77/779baab22cd51d8ed4ebe30eac5da5f5.png) ![在这里插入图片描述](https://static001.geekbang.org/infoq/cd/cdef47c19fe2d278df77e80b7831a26c.png) 下面是一些以两种不同方式执行相同操作的代码案例,一种用到了我们才谈过的拆分,还有一种用到了我们刚刚学到的 `endswith()` : filenames = ['lochness.png' , 'e.t.jpeg' , 'conspiracy_theories_CONFIRMED.zip'] # 1: Using ENDSWITH for files in filenames: if files.endswith('zip'): print(f'{files} is a zip file') else: print (f'{files} is NOT a zip file') # 2: Using SPLIT for files in filenames: if files.split('.')[-1] == 'zip': print(f'{files} is a zip file (using split)') else: print (f'{files} is NOT a zip file (using split)') 大多程序员是从来不会把所有文档读遍来学习全部内容的。作为一名程序员,部分工作就是要搜索如何解决问题的信息。 **5\. 使用列表:** 列表很棒,用途也很广泛。 下面的案例中,我们将整数和字符串混合在了一起: my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b'] for item in my_list: print (f'current item: {item}, Type: {type(item)}') ![在这里插入图片描述](https://static001.geekbang.org/infoq/78/78e3525c24907a5881a2755133b21594.png) 注意我们是怎么将字符串和整数混合在一起的,如果尝试对其排序,就会报错: print (my_list.sort()) ![在这里插入图片描述](https://static001.geekbang.org/infoq/81/819cd7b3399b531a304d711a44f2a4f9.png) 如果我们想把整数与字母分开要怎么做?一种方式是通过循环来实现,我们可以遍历列表中的所有项目。初学者很早就会使用循环了,循环对于编程也很重要。 代码可能是下面这样的: my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3 , 'a' , 33.3 , 'n' , 'b'] number_list = [] string_list = [] for item in my_list: print (f'current item: {item}, Type: {type(item)}') if not isinstance(item,str): number_list.append(item) else: string_list.append(item) my_list = string_list 即便有些混乱,这也是一种有效的方式,可以运行,不过经过重构可以用单行来表示! 如果想要生活多些乐趣,请学习 Python 的列表解析式,下面是同样问题通过列表解析式得出的: my_list = [letter for letter in my_list if isinstance(letter,str)] 就是这样! 还没结束!使用过滤器也可以获得同样的结果: def get_numbers(input_char): if not isinstance(input_char,str): return True return False my_list = [1,2,3,'a','b','c'] check_list = filter(get_numbers, my_list) for items in check_list: print(items) ![在这里插入图片描述](https://static001.geekbang.org/infoq/8f/8f45912f9995ffafff0e07c47a5a487c.png) 现在你可能明白了,实现同样的结果有很多方法,你必须找出适合你或你团队的那个。 额外知识点 * **反向列表(或字符串):** names = ['First' , 'Middle' , 'Last'] print(names[::-1]) >>> ['Last', 'Middle', 'First'] **\- 在列表中加入元素:** names = ['First' , 'Middle' , 'Last'] full_name = ' '.join(names) print(f'Full Name:\n{full_name}') >>> First Middle Last **6\. 使用循环:** 是否在 Python 中见过这样的代码? greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob'] for index in range(0,len(greek_gods)): print (f'at index {index} , we have : {greek_gods[index]}') 你可能发现了,它来自其他语言,这不是 Python 的风格。在 Python 中,你可以使用 for-each 循环: for name in greek_gods: print (f'Greek God: {name}') 你很快就能发现,这里我们不包含索引。如果想用索引打印要怎么做?在 Python 中,你可以使用枚举(enumerate 参数),这是一种访问所需内容的绝佳方案。 for index, name in enumerate(greek_gods): print (f'at index {index} , we have : {name}') ![在这里插入图片描述](https://static001.geekbang.org/infoq/f1/f194062b3746cb43539f02503807f357.png) **7\. 使用函数(并正确谈论函数):** 我在从事动画工作时,总是说如果同一个操作重复 5 次,就应该考虑是否需要写个程序。有些时候花上两周开发一款工具可以节省你六个礼拜的工作时间。 编写代码时,如果发现同一动作执行了不止一次,应该考虑这是过程还是函数,还不只是写写代码。函数会返回内容,过程则只是运行代码,第一个案例是个过程,第二个是函数。 这样说可能会令人困惑,下面是其工作原理的示意图: ![在这里插入图片描述](https://static001.geekbang.org/infoq/6a/6a144d6de320970db53838978c5e53e3.png) 注意 print 和 return 的差异,看起来也许很相似,但如果你查看输出结果,函数只会返回发送的名称。 下一个要了解的语法是 parameters 和 arguments,在过程或函数中定义时(红色部分)被称为形参(parameters),当发送名称到过程或函数中(绿色部分)时就叫实参(arguments)了。 下面是些案例: **案例 1** def print_list(input_list): for each in input_list: print(f'{each}') print() #just to separate output greek_gods = ['Zeus' , 'Hera' , 'Poseidon' , 'Apollo' , 'Bob'] grocery_list = ['Apples' , 'Milk' , 'Bread'] print_list(greek_gods) print_list(grocery_list) print_list(['a' , 'b' , 'c']) ![在这里插入图片描述](https://static001.geekbang.org/infoq/a5/a5df452915a9f4766144a551b54bca23.png) 无需把循环写上 3 次,只需在过程中写上一次,然后在需要时调用即可。在案例 2 中,你可以发现代码是如何返回反向列表的。 **案例 2** def reverse_list(list_input): return list_input[::-1] my_list = ['a', 'b' , 'c'] print (reverse_list(my_list)) >>> ['c', 'b', 'a'] **8.面向对象编程** Python 是一种面向对象的语言,其强大之处在于对象。将对象视为蓝图,如果使用蓝图,你可以创建该蓝图的实例。也就是说,你可以创建需要的多个蓝图实例,但不会损毁你使用的蓝图。 面向对象编程(OOP)是一个庞大的话题,因此我们不会在本节中涵盖所有你需要了解的内容,但可以通过几个简单的示例帮你入门。 如果你之前读过面向对象编程的相关内容,可能已经厌倦了学生(student)类,但我们又来了。从定义一个名为 student 的类开始,student 会拥有一个名称和一个 subject\_list: class Student(): def __init__(self,name): self._name = name self._subject_list = [] 如果想要创建一个 student,可以像这样将其分配给变量: student1 = Student('Martin Aaberge') 如果需要更多 student,可以使用同一个类并添加另外的姓名: student2 = Student('Ninja Henderson') `student1`和`student2`都是 student 类的实例,它们共享同一个蓝图,但彼此之间并无关系。此时,我们对学生们能做的不多,但我们确实增加了一个主题列表。要填充此列表,我们需要创建方法,你可以调用方法来实现与该类实例的交互。 我们更新: class S ![](https://static001.geekbang.org/infoq/a7/a74ca620f34c4bb6888d6f206d64adae.png) tudent(): def __init__(self,name): self._name = name self._subject_list = [] def add_subject(self, subject_name): self._subject_list.append(subject_name) def get_student_data(self): print (f'Student: {self._name} is assigned to:') for subject in self._subject_list: print (f'{subject}') print() 这个类可以用于创建、编辑学生信息,并获取我们存在其中的信息: **(1)Python 所有方向的学习路线(新版)** 这是我花了几天的时间去把 Python 所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。 最近我才对这些路线做了一下新的更新,知识体系更全面了。 ![在这里插入图片描述](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png) **(2)Python 学习视频** 包含了 Python 入门、爬虫、数据分析和 web 开发的学习视频,总共 100 多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。 ![在这里插入图片描述](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png) **(3)100 多个练手项目** 我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。 ![在这里插入图片描述](https://static001.geekbang.org/infoq/3d/3d6f0eec83eb2777c7496115ed8a2702.png)
评论