前言参考资料:作者主要是跟着书学习Python的《Python编程:从入门到实战》,笔记的思路参考文中的上下文书。其次,还有笔者一年前在MOOC课上看过的北理工松田教授的Python课程。松田教授的课很好,最大的特点是每一节都有完整的示例代码。但是对于新手小白来说可能不是很友好,一些不常用的功能很容易搞混。《Python编程:从入门到实战》比较适合零基础学习,里面会提到一些互操作的编程思想和Python格式规范。结合常用函数和方法:由于作者有Java编程基础,这里只介绍Python和Java的区别,以及一些容易遗忘的难点,着重介绍Python的语法基础。对于新手朋友,还是先看书为好。结合《Python常用函数、方法示例总结(API)》,效果可能会更好。1、变量和简单数据结构.py表示这是一个Python程序,小编会使用Python解释器来运行;Python解释器读取整个程序并确定其中每个单词的含义;当程序未能成功运行时,解释器将提供回溯。Traceback是一条记录,指示解释器在尝试运行代码时卡在何处;在Python中,字符串可以用单引号或双引号括起来;Python中的转义字符:\n换行(光标到下一行的开头);\r回车(光标回到行首);\t制表符,\n\t代表换行,在下一行的行首添加一个制表符;\b回溯;在Python2中,有的print语句包含括号,有的不包含;Python用两个乘号表示幂,如:3**2==9;Python2中的除法\直接删除小数部分。小数保留在Python3中。但在Python2中:3.0/2==1.5;ZenofPython:Python的一些编程概念。在终端输入importthis获取;Python关键字:Python内置函数:2.列表相关========列表示例:bicycles=['trek','cannondale','redline']。注意方括号和逗号;打印列表示例:print(bicycles);访问列表元素:bicycles[0]--->trek;访问列表的倒数第二个x元素:bicycles[-x]--->whenx=1Output:redline;*使用for循环遍历列表:`forobjectinlist:print(object)listcomprehension:list=[num**2fornuminrange(1s,11)]--->output1to10Square;遍历列表的一部分:forobjectinlist[firstNum:lastNum]:;可以使用list[:]的方法复制列表;祖先相关:在Python中,不能修改的值称为不可变的,不可变的列表称为元组;与编程中列表的区别在于它使用()或元组()或不使用括号;而列表使用[]或list();元组创建后不能修改,所以没有特殊操作;如果提出修改Python语言修改提案,则需要编写Python改进提案(PEP)。PEP8是最古老的PEP之一,它指定了以下Python代码格式指南:每级缩进4个空格。文本编辑器(或ide)需要设置tab键为4个空格;Python解释器根据水平缩进解释代码,不关心垂直间距;建议每行不要超过4个字符;建议在比较运算符两边加一个空格;3.组装一个集合示例:bicycles={'trek','cannondale','redline'}。注意大括号和逗号;集合的特点是不能重复;使用set数据去重:s=set(list)#利用set没有重复元素的特点去重l=list(s)#将set转换回list4.If语句Python在判断是否相等时考虑大小写;大多数情况下,检查两个不等式会更有效;在Python中使用and和or来表达andor,而不是&&和||;检查列表是否包含特定值语句:if(objectinlist),也可以使用if(objectnotinlist);Python的if语句的基本结构如下(注意冒号):`ifconditional_test1:dosomething1elifconditional_test2:dosomething2else:doother判断列表是否为Empty:iflist:5.Dictionaries其实任何Python对象都可以用作字典中的值;字典示例:alien0={'color':'green','points':5}遍历字典:forkey,valueinmap.items():遍历字典的键:forobjectinmap.keys():还是forobjectinmap:,因为遍历字典默认遍历所有的key;按顺序遍历字典的所有key:forobjectinsorted(map.keys()):遍历字典的values:forobjectinmap.values():遍历字典的values,消除duplicates:forobjectinset(map.values()):列表和字典的嵌套层次不宜过多。如果太多,可能会有更简单的解决问题的方法;6、用户输入和while循环在Python3中使用input()方法,在Python2.7中使用raw_input()方法;循环语句:whileconditional_test:您可以使用break关键字退出循环。这里的循环包括while和for循环;您可以使用continue关键字继续循环;使用循环处理列表:whileobjectinlist:7.没有返回值的函数定义示例:defgreet_user(username,age=1):#username没有设置默认值,必须放在开头形参列表的“””显示简单问候语"""print("hello,"+username.title()+",ageis"+str(age))greet_user('jesse',18)#position实参greet_user(age=18,username='jesse')#keyword实参greet_user('jesse')#使用默认值age=1第二行是文档字符串注释,描述函数做了什么;后面是函数调用;函数定义的例子正常返回值:defgreet_user(username,age=1):#username没有设置默认值,必须放在形参列表的开头"""显示一个简单的问候语"""print("hello,"+username.title()+",ageis"+str(age))returnusername.title()带有字典返回值的函数定义示例:defbuild_person(first_name,last_name):#username没有设置默认值,必须放在形参列表的开头"""ReturnDictionary"""person={'first':first_name,'last':last_name}returnperson传递一个参数列表,the列表将被修改:defgreet_users(names):"""Incomingparametersarealist"""fornameinnames:msg="Hello,"+name.title()+"!"print(mas)usermanes=['margot','hannah','ty']greet_users(usernames)传递列表参数的副本,不修改列表:defgreet_users(names[:]):传递任意数量的实际参数:*toppings可以被理解为一个列表;defmake_pizza(*toppings):"""打印客户订购的所有配料"""print(toppings)make_pizza('pepperoni')make_pizza('mushrooms','greenpeppers','etracheese')Python创建一个名为浇头的文件空参数元组;将位置参数与任意数量的参数结合起来:defmake_pizza(size,*toppings):接受任意数量参数的形式参数*toppings必须放在最后;使用任意数量的关键字参数:\user\_info**可以理解为字典;defbuild_profile(name,**user_info):"""创建一个字典,其中包含我们对用户的所有了解。"""profile={}profile['name']=key的名称,user_info.items()中的值:profile[key]=valuereturnprofileuser_profile=build_profile('albert',location='princeton',field='physics')python中的print(user_profile),imported是一个模块,使用module.method(参数)调用模块中的函数;导入一个特定的函数,并使用函数示例:`frommodule_nameimportfunction_0,function_1function_0()function_1(parameter)使用as为函数分配一个别名:frommodelimportfunctionasfn;然后使用fn()调用函数函数;使用as为模块分配别名:importmodelasmd;然后使用md.function()调用函数;导入模块的所有函数:frommodelimport*;后续函数可以直接使用模型中的函数function()调用;可以在函数类中使用global关键字将变量声明为全局变量;lambda表达式:<函数名称>=lambda<参数>:<表达式公式>示例:>>>f=lambdax,y:x+y>>>f(10,15)25>>>f=lambda:"lambda表达式">>>print(f())>>;>lambda表达式函数和模块编写细节:外部函数导入的推荐做法:只导入你需要使用的函数/导入整个模块并使用句点符号;函数和模块名称应使用小写字母和下划线,而不是驼峰命名法;函数注释紧跟在函数定义之后,使用文档字符串格式;为形参指定默认值时,等号=两边不能有空格;8、类和对象类中的函数称为方法;一个类的例子:模块名为dog.py"""代表小狗和电子狗的类"""classDog():"""Simulatedpuppy"""def__init__(self,name):"""初始化instance"""self.name=nameself.age=1#给属性赋默认值defget_age(self):"""Returnage"""returnself.agedefset_age(self,age):"""设置年龄"""self.age=agedefsit(self):"""模拟一只小狗在命令时蹲下"""print(self.name.title()+"isnowsitting.")classTinyDog(Dog):"""Puppy是dog的子类"""def__init__(self,name)"""初始化父类的属性"""super().__init__(name)__init__()方法:形参self是必不可少的,必须在其他参数之前;创建Dog实例时,会自动传入实参self每个与类关联的方法调用都会自动传递实参self,self是一个指向实例本身的应用,允许实例访问类中的属性和方法;以self为前缀的变量。对类Use中的所有方法都可用,像这样可以通过实例访问的变量称为属性;关于父类和子类:子类和父类必须包含在当前文件中,父类必须在子类之前;父类名称必须在子类定义中用括号指定;super()是将父类与子类关联起来的特殊函数;在Python2.7中,super()方法需要传递两个实参:子类名和self,字段对象在父类定义的括号中指定;在Python2.7中创建类时,需要在括号内包含object这个词'willie')dog_name=my_dog.name#获取属性dog_name=my_dog.get_age()#通过方法获取属性my_dog.name='jucy'#直接修改属性my_dog.set_age=18#通过方法修改属性my_dog.sit()#从狗那里调用方法。在py模块中导入多个类:fromdogimportDog,TinyDog;导入整个dog.py模块,然后用句点来表示需要访问的类:importdog;collections模块包含一个类OrderedDict。这个类的实例行为几乎和字典一样,不同的是它记录了键值对的顺序;类的编码风格:类采用驼峰命名法,类中每个单词首字母大写;实例名和模块名小写,单词之间加下划线;一个空行分隔方法;两个空间分隔类;您需要同时导入标准库和模块以及9.文件打开并读取文件并在屏幕上显示其内容:withopen('xxx.txt')asfile_object:contents=file_object.read()print(contents)Open文件的open()和关闭文件的close()可以同时使用,但是当出现bug时,close()无法执行,无法关闭文件。如果不写close(),则由Python判断是否关闭文件;with关键字将在不再需要访问文件后关闭文件;直接打印内容会多出一个空行,可以这样打印print(contens.rstrip());关于文件绝对路径:Linux和OSX:file_path='/home/.../xxx.txt';Windows:file_path=C:\...\xxx.txt;建议将数据文件存放在与程序文件相同的目录下,或程序文件所在目录的下一级文件夹;逐行读取:withopen(filename)asfile_object:forlineinfile_object:print(line)同样,如果直接打印内容,会多出一个空行,可以这样打印print(line.rstrip());使用with关键字时,open()返回的对象仅在with代码块中可用;处理文件时,注意使用strip()或rstrip()去掉字符串两边的空格;Python将所有文本解释为字符串;open('xxx.txt','w'):打开文件进行写入;其他参数包括rreading,aappending,r+readingandwriting;aappending:将内容追加到文件末尾,而不是覆盖文件原来的内容;以wwrite模式打开文件时要小心,如果指定的文件名已经存在,Python会在返回对象之前清空文件;Python只能将字符串写入文本文件;10.异常使用try-except处理异常:try:print(5/0)exceptZeroDivisionError:print('CaughtZeroDivisionErrorexception')else:print('Uncaughtexception')finally:print('是否有异常或者notExecute')可以在except缩进块中加入关键字pass,跳过错误捕获;其中else和finally部分的代码块可以省去;11、测试使用Python标准库中的模块unittest进行测试;一个简单的测试示例:importunittestfrommodel_nameimportfunction_nameclassTestCase(unittest.TestCase):"""Testfunctionfunction_name"""defsetUp(self):"""构建前提条件"""deftest_function(self):run_result=function_name(parameter)self.assertEqual(run_result,correct_result)*首先导入模块`unittest`和测试方法`function_name`;*然后创建`TestCase`类,其中包含各种具体的单元测试方法。该类继承`unittest.TestCase`类;*`setUp()`方法用于创建前提条件;*编写测试方法`test_function`,方法名必须以`test_`开头;*使用断言`assertEqual()`判断函数执行结果与预期结果的差异;*`unittest.main()`让Python运行这个文件中的测试;*查看unittest中常用的6种断言方法;*每次测试完成,Python会打印一个字符:*测试通过,打印一个句点`.`;*测试导致错误并打印一个“E”;*测试导致断言失败并打印“F”;
