
参考资料:
笔者Python学习主要以《Python编程:从入门到实战》这本书为主,笔记的思路参考书里的脉络。其次还有笔者一年前在慕课上看的北理的嵩天教授的Python课程。嵩天教授的课很好,最大的特点是每个版块都有完整的示例代码。但可能对新手小白不太友好,有些不常用的函数容易弄混。《Python编程:从入门到实战》更适合零基础学习,里边会提到一些互通的编程思想和Python的格式规范。
结合常用函数、方法:
由于笔者有Java的编程基础,因此这里只记录Python跟Java不一样的地方以及一些易忘点和难点,重点放在Python的语法基础。对于新手朋友还是先看书为好。结合《Python常用函数、方法示例总结(API)》来看可能效果会好一些。
.py指出这是一个Python程序,编辑器将使用Python解释器运行它;traceback。traceback是一条记录,指出解释器尝试运行代码时,在什么地方陷入困境;\n换行(光标到下行首);\r回车(光标回到本行首);\t制表符,\n\t表示换行并在下一行开头添加制表符;\b回退;print语句包含括号,有些不包含;3 ** 2 == 9;\将小数部分直接删除。Python3中保留小数。但在Python2中:3.0 / 2 == 1.5;import this即可获取;


bicycles = [ 'trek', 'cannondale', 'redline']。注意方括号与逗号; 打印列表示例:print(bicycles); 访问列表元素:bicycles[0] --- > trek; 访问列表倒数第x元素:bicycles[-x] --- > 当x=1时输出:redline; 使用for循环遍历列表:for object in list:
print(object)list = [num**2 for num in range(1s, 11)] ---> 输出1到10的平方;for object in list[firstNum: lastNum]:;list[:]的方法复制列表;()或tuple()或不使用括号;而列表使用[]或list();bicycles = { 'trek', 'cannondale', 'redline'}。注意大括号与逗号;```s = set(list) #利用集合无重复元素的特点去重l = list(s) #将集合转变回列表```and和or表示并与或,而不是&&和||;if(object in list),也可以用if(object not in list);if list:alien0 = {'color': 'green', 'points': 5}for key, value in map.items():for object in map.keys():或for object in map:,因为遍历字典默认遍历所有的键;for object in sorted(map.keys()):for object in map.values():for object in set(map.values()):input()方法,而在Python 2.7里使用raw_input()方法;while conditional_test:break关键字退出循环,这里的循环包括while和for循环;continue关键字继续循环;while object in list:```def greet_user(username, age=1): #username没有设定默认值必须放在形参列表开头 """显示简单问候语""" print("hello, " + username.title() + ", age is " + str(age))greet_user('jesse', 18) #位置实参greet_user(age=18, username='jesse') #关键字实参greet_user('jesse') #使用默认值age=1```* 第二行为**文档字符串注释**,描述函数是做什么的;
* 后面为函数调用;带普通返回值的函数定义示例:```def greet_user(username, age=1): #username没有设定默认值必须放在形参列表开头 """显示简单问候语""" print("hello, " + username.title() + ", age is " + str(age)) return username.title()``````def build_person(first_name, last_name): #username没有设定默认值必须放在形参列表开头 """返回字典""" person = {'first': first_name, 'last': last_name} return person``````def greet_users(names): """传入参数为列表""" for name in names: msg = "Hello, " + name.title() + "!" print(mas)usermanes = ['margot', 'hannah', 'ty']greet_users(usernames)```def greet_users(names[:]):```def make_pizza(*toppings): """打印顾客点的所有配料""" print(toppings)make_pizza('pepperoni')make_pizza('mushrooms', 'green peppers', 'etra cheese')```* Python创建一个名为toppings的空元组;结合使用位置实参和任意数量实参:```def build_profile(name, **user_info): """创建一个字典,其中包含我们知道的有关用户的一切""" profile = {} profile['name'] = name for key, value in user_info.items(): profile[key] = value return profileuser_profile = build_profile('albert', location='princeton', field='physics')print(user_profile)```as给函数指定别名:from model import function as fn;后续使用fn()即可调用function函数;as给模块指定别名:import model as md;后续使用md.function()即可调用函数;from model import *;后续直接使用model里的函数function()即可调用函数;global关键字声明变量是全局变量;<函数名> = lambda <参数> : <表达式>;* 示例:
```
>>> f = lambda x, y : x + y >>> f(10, 15) 25 ```> > > f = lambda : "lambda表达式"
> > > print(f())
> > > lambda表达式
```dog.py```"""表示小狗和电子狗的类"""class Dog(): """模拟小狗""" def __init__(self, name): """初始化实例""" self.name = name self.age = 1 #给属性指定默认值 def get_age(self): """返回年龄""" return self.age def set_age(self, age): """设置年龄""" self.age = age def sit(self): """模拟小狗被命令时蹲下""" print(self.name.title() + " is now sitting.")class TinyDog(Dog): """小狗是狗的子类""" def __init__(self, name) """初始化父类的属性""" super().__init__(name)```* `__init__()`方法:形参self必不可少,而且必须位与其他参数前面;
* 创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,其是一个指向实例本身的应用,让实例能够访问类中的属性和方法;
* `self.`为前缀的变量都可供类中的所有方法使用,像这样可以通过实例访问的变量称为属性;有关父子类:* 子类和父类必须包含在当前文件中,父类必须在子类前面;
* 子类定义中括号内必须指定父类名称;
* `super()`是一个特殊函数,将父类和子类关联起来;
* 在Python 2.7中,`super()`方法需要传递两个实参:**子类名**和**self**,并且父类定义的括号内指定字段**object**;在Python 2.7中创建类时,需要在括号类内包含单词```class Dog(): --snip--my_dog = Dog('willie')dog_name = my_dog.name #获取属性dog_name = my_dog.get_age() #通过方法获取属性my_dog.name = 'jucy' #直接修改属性my_dog.set_age = 18 #通过方法修改属性my_dog.sit() #调用方法```from dog import Dog, TinyDog;import dog;OrderedDict。该类的实例行为几乎与字典相同,区别在于其记录了键值对的顺序;```with open('xxx.txt') as file_object: contents = file_object.read() print(contents)```* 打开文件`open()`和关闭文件`close()`可以同时使用,但当有bug时`close()`执行不了会导致文件无法关闭。不写`close()`将由Python确定是否关闭文件;
* `with`关键字在不再需要访问文件后将其关闭;
* 直接打印contents会多出一个空行,可以这样打印`print(contens.rstrip())`;有关文件绝对路径:Linux和OS X:```with open(filename) as file_object: for line in file_object: print(line)```* 同理,直接打印contents会多出一个空行,可以这样打印`print(line.rstrip())`;使用```try: print(5/0)except ZeroDivisionError: print('捕获到ZeroDivisionError异常')else: print('未捕获异常')finally: print('无论是否有异常都会执行')```* 可在`except`的缩进块里添加关键字**pass**跳过错误捕获;
* 其中,`else`和`finally`部分的代码块可省;unittest进行测试;```import unittestfrom model_name import function_nameclass TestCase(unittest.TestCase): """测试函数function_name""" def setUp(self): """构建前置条件""" def test_function(self): run_result = function_name(parameter) self.assertEqual(run_result, correct_result)unittest.main()```* 首先导入模块`unittest`和被测试方法`function_name`;
* 然后创建`TestCase`类,其包含各种具体的单元测试方法。该类继承`unittest.TestCase`类;
* `setUp()`方法的作用是创建前置条件;
* 编写测试方法`test_function`,方法名必须以`test_`打头;
* 使用断言`assertEqual()`判断函数执行结果与预期结果的差别;
* `unittest.main()`让Python运行这个文件中的测试;unittest里常用的6个断言方法请见;每完成一个测试,Python都会打印一个字符:测试通过打印句点 原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。