他的回复:
华为云ID:dzx_huawei 第一周笔记:准备安装Python(www.python.orgpython 3.x 2.x)课前准备OM安装Visual Studio Code (微软)课前准备OM安装Visual Studio Code扩展课前准备OM运行Python,执行Python语句课前准备OM创建源码文件、保存、编辑源码初探pythonOM初探PythonC语言:源代码机器语言链接可执行文件执行Python:不需要编译成二进制代码,可以直接从源代码运行程序。源代码字节码机器语言执行优势:1.不用关心程序的编译和库的链接等问题,开发人员的工作更加轻松2.python代码与机器底层更远了,更加易于移植,基本上无需改动就能跨平台运行缺点:1.Python是解释语言,运行效率比C语言差。每次运行Python程序是要先将程序文件或者语句转换成字节码,然后再由Python虚拟机把字节码转换成机器语言,最后才能在硬件上运行。效率提升:1.编译成pyc文件,存储了字节码,节省了多次编译动作,减少运行时加载模块的时间。字节码的形式也增加了反向工程的难度,可以保护源代码2.调用C进行扩展OM初探Python对开发人员非常实用的函数:dir([obj]):显示对象的属性,如果没有提供参数,则显示全局变量的名字,通过执行dir(对象),可以看到其属性和函数信息OM初探Python输入help(),进入交互模式,q退出输入int, str,dict等获取帮助信息输入help(对象)直接获取帮助信息OM课程主要内容基本语句数据类型初探PythonWhy Python?数据类型OM数据类型Python支持的标准类型数字字符串(str)列表(list)元组(tuple)字典(dict)集合(set)OM数据类型Python支持的其它类型类型(type)Null对象(None)函数模块类文件OM数据类型标准类型的三种分类方式存储模型:看对象能保存多少对象更新模型:对象创建之后是否可以更新值访问模型:对象的访问方式Data TypeStorageModeUpdateModeAccess ModeNumberScalarinvariantDirectStringScalarinvariantSequential/RandomListContainermutableSequential/RandomTupleContainerinvariantSequential/RandomDictionaryContainermutableMappingSetContainermutableMappingFrozensetContainerinvariantMappingOM数据类型—数字Python支持的数字类型整型:1,234,0,-4,0x93,056长整型:123456789999999L,-8976l(Python3.6版本非法)布尔型:整型的子类,True和False对应整型的1和0浮点型:1.23,3.14e-10复数:1 + 2j,0.23-8.55j复数的内建属性real:复数的实部imag:复数的虚部conjugate():返回该复数的共轭复数OM数据类型—字符串操作符:“+”:用于字符串的链接操作。字符串的链接也可以使用空格“*”:重复操作符。“==”, “”, “>”, “!=”:可以进行两个字符串的比较。OM数据类型—字符串出于性能方面的考虑,不推荐使用“+”进行字符串连接OM数据类型—字符串操作符(续):“[:]”:切片操作符。[开始:终止:步长] “in”, “not in”:是否为成员测试。OM数据类型—字符串字符串格式化操作符%%[(name)][flags][width][.precision]typecode% (a,b,c)稍微高级一点的用法:只有一个参数时可以省去括号:OM数据类型—字符串“r” “R”:原始字符串操作符号。当字符串前有该操作符则输出的字符串就是输入的字符串,不进行相关的转义字符的替换。正则表达式的很多字符串都会用到该操作符已避免不必要的转义字符。“u”“U”:Unicode操作符。可以把该操作符后的字符串转换为Unicode编码的字符串。OM数据类型—字符串字符串是不可改变的对象:我们可以看到不能对字符串的单个元素赋值,或者对字符串的切片赋值。OM数据类型—字符串字符串是不可改变的对象(续):上述例子,我们可以看到字符串被改变了。其实这不是字符串改变了,而是我们把原有的字符串“I love pyton.”释放了,重新创建了一个字符串,并赋了新的值。我们可以通过id()函数来发现这个问题。id()函数返回对象的实例号。我们可以很清楚的看到,实例号发生了改变,这个a是新创建出来的字符串。对于不可改变的对象,象字符串,在赋值时作为左值的表达式必须是完整的对象。否则就会引发异常。就象我们前面举的给字符串的切片赋值的例子。OM数据类型—字符串除了之前介绍的几个序列类型常用的内置函数外,还有以下函数在字符串中也是比较常用的:cmp(str1,str2):根据字符串的ASCII码值进行比较(python 3.6没有cmp)max()和min():按照ASCII码值返回最大或最小的字符OM数据类型—TupleTuple与List互相转换:Tuple 可以转换成list, 反之亦然。内置的tuple 函数接收一个list, 并返回一个有着相同元素的tuple。而list 函数接收一个tuple 返回一个list。从效果上看, tuple 冻结一个list, 而list 解冻一个tuple。OM数据类型—Tuple要当心单元素Tuple的陷阱:圆括号也被重载作为分组操作符使用,由圆括号包含的单一元素首先被作为分组操作,而不是作为元组的分界符。以下代码摘自R16 DEV6910的boardhelp.py,赶快修改并排查吧!OM数据类型—DictionaryDictionarydict是Python 的内置数据类型之一, 它定义了键和值之间一对一的关系, 它是用{}括起来的,{}代表一个空的字典每个Dictionary的项的句法为:key:value. 当输入的Key不存在时,会引发一个异常。OM数据类型—DictionaryDictionary的相关操作:1、使用zip构造一个字典2、使用已经存在的key获取元素的值3、使用不存在的key,字典新增加一个元素4、字典元素的值可以是任意类型,如数字5、字典的key是任意可hash的对象,如数字6、del删除字典元素7 字典的clear()方法清除字典所有元素OM数据类型—DictionaryDictionary的遍历:从python2.2开始,可以不必再用keys()方法获取供循环使用的键值列表,可以用迭代器访问,即:只要用字典的名字就可以在for循环内遍历字典1、使用dict函数传入键值对构造2、使用现有dict解包构造新的dict3、使用dict的copy()函数构造dict4、实验中三个dict对象不相同OM数据类型—Dictionary常用的函数:字典方法方法说明dict.clear()删除字典对象内所有元素dict.copy()字典浅拷贝,返回新生成的字典对象dict.get(key, default=None)使用key获取字典中的值,如果不存在则返回默认值,如果没有设置默认则返回Nonedict.items()返回字典的键值tuple列表dict.keys()返回字典的键列表dict.setdefault(key, default=None)设置对应key的默认值dict.update(dict2)将dict2的键值都加入到dict中dict.values()返回dict的值列表dict.fromkeys(seq,val=None)创建并返回一个新字典,以seq中的元素做该字典的键,val做字典中所有键对应的初始值OM数据类型—Dictionary1、准备两个字典对象,其中有一个项的键相同,值不同2、使用bDict更新aDict,注意键’a’对应的值更新3、使用fromkeys方法构造cDict对象,值均为True4、使用setdefault添加一个新的项,键为’z’,值为空字典{},并为值增加一个元素’x’:35、使用setdefault添加一个新的项,键为‘h’,值为空列表[],并为这个列表增加一个新元素’x’OM数据类型—Dictionary1、keys()获取字典的key列表2、values()获取字典的值列表3、items()获取字典的键值的tuple列表使用列表返回字典的key value 或者item在字典大的时候占用大量内存4、使用enumerate函数获取字典的迭代器配合next()方法获取键索引和键值构成的tuple对象迭代到末尾时系统会抛出停止迭代异常OM数据类型—DictionaryDictionary的排序:defsortedDictValues1(adict): items = adict.items( )items.sort( ) return [value for key, value in items] def sortedDictValues2(adict): keys = adict.keys( ) keys.sort( ) return [adict[key] for key in keys]字典解析:大家熟悉的列表解析:>>> some_list= [1, 2, 3, 4, 5]>>> another_list= [ x + 1 for x in some_list]>>> another_list[2, 3, 4, 5, 6]从python2.7开始,可以用同样的语法创建字典:OM数据类型—集合集合对象是一组无序排列的可哈希的值,集合成员可以作为字典的键,空集合为set()集合集合的类型:可变集合(set)和不可变结合(frozenset)。4、可变集合可以增删元素,是不可哈希的,因此既不能作为字典的键也不能作为其他集合中的元素。5、不可变集合则正好相反。1、使用列表构造一个集合2、构造一个空集合,注意是set()3、在列表中增加一个列表元素,再使用这个列表构造集合会失败OM数据类型—集合集合支持的操作:最新的集合属性和方法,请大家使用help查询散列扩展学习散列(hash)1、键值必须是可散列的,实现__hash__, __eq__函数,且保证a==b为真,hash(a)==hash(b)也为真2、内存开销上增加3、键查询很快4、键的次序取决于添加顺序5、添加新键可能会改变已有顺序OM数据类型小结OMOM数据类型——变量变量变量名必须是字母或者_开头。变量名的其他部分可以是字母,_或者数字。Python是大小写敏感的。其中以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数,供解释器使用。OM数据类型——变量变量声明和赋值:在Python中变量是不需要声明的。变量通过首次赋值产生, 当超出作用范围时自动消亡。X = 1该赋值在Python中是如何进行的?对象变量引用赋值的过程:1、在内存中创建对象1。2、创建变量名X。3、把变量和对象建立映射关系。在赋值时,是把对象的引用赋值给变量而不是值。变量可以引用任何类型的对象。变量没有类型,只有对象有类型。变量在使用前必须被赋值。OM数据类型——变量del和垃圾回收1、del删除名称,而不是对象。删除alist之后就不能未经初始化使用它2、而blist还有效,blist指向的对象还存在Python的垃圾回收:主要算法为引用计数,当引用计数归零时,对象立即就被销毁。当删除的变量保持的是对象最后一个引用的时候,会删除对象。OM数据类型——变量浅拷贝和深拷贝:通过给列表分配一个变量能创建对列表的引用,如果要创建列表的副本就要理解浅副本和深副本的概念。1 列表或其他包容器对象的浅拷贝生成对象本身的拷贝,并将其包含的对象插入到新对象中。可用分片(object[:])和copy模块的copy(obj)函数创建。2 列表或其他对象包容器对象的深拷贝生成对象本身的副本,并递归地生成所有子对象的拷贝,加入到新对象中。可用copy模块的deepcopy(obj)函数创建。比较两种拷贝副本,一般情况下表现一样。但当列表内包含另一个列表的情况下,父列表的浅副本将包含对子列表引用,而不是独立副本。其结果是,当更改其内部列表时,从父列表的两个副本中都可见,如下例:OM数据类型——变量浅拷贝和深拷贝(续):1、变量赋值,两个变量指向相同的列表对象2、通过列表切片复制列表,生成新的队列对象3、对原始队列进行修改,切片生成的队列对象也被修改浅拷贝:切片操作符,或者copy.copy()1、导入copy模块2、调用deepcopy从alist生成blist,两个列表为不同的对象3、对alist进行修改,blist保持不变深拷贝:copy.deepcopy()变量总结变量不是盒子,而是对象上的标注ID是对象的唯一标注,在整个生命周期不变==(__eq__)比较两个对象的值,is比较对象标识,is比==执行快Python一切皆对象OM基本语句OM课程主要内容基本语句数据类型初探PythonWhy Python?OM基本语句Python语句printdelifwhileforbreakcontinuepassPython语句构造和执行原则语句按照顺序一条一条执行,直到出现判定和跳转指示按照缩进自动识别语句和语句块的边界,顶层代码即模块中缩进最小的那些语句复合语句=header:语句空格和注释(#及其后的文字)都将被忽略OM基本语句——printprint()print函数是把对象用文本化的形式输出到标准的输出流上。OperationInterpretationPrint(spam, ham)Print objects to sys.stdout, add a space betweenOM基本语句——deldeldel删除语句,可以删除列表和字典中的一项,删除列表中的一个切片,可以完整的删除一个对象。它与pop()方法不同,pop方法会返回一个值。1、构造一个list,删除第一个元素2、使用pop删除第一个元素,方法会返回该元素3、使用切片的方式删除部分元素或者所有元素,最后列表为一个空列表4、删除变量,此时列表对象也会被删除OM基本语句——ififif 语句的基本形式如下:if : #if test # associated block elif : # optional elif's else: # optional else 如果复合语句是单一语句,可以和前面的语句写在同一行。这条原则也适用于for循环和while循环。思考:C/C++ switch/case 语句在python中如何替代。OM基本语句——if条件表达式(即“三元操作符”2.5版本以后)C/C++: condition? X:Y condition是条件表达式,X是condition为真的结果,Y是condition为假的结果Python: X if C else Y OM基本语句——whilewhilewhile expression:suite_to_repeatWhile 循环的suite_to_repeat子句会一直循环执行,直到expression值为假。OM基本语句——forfor 为迭代而生for iter_varin iterable:suite_to_repeat每次循环,iter_var迭代变量设置为可迭代对象(序列,迭代器或其他支持迭代的对象)的当前元素,提供给suite_to_repeat语句块使用。1、直接迭代namelist元素2、通过namelist元素下标迭代,在生成range对象时我们使用len,所以不会出现异常3、使用enumerate生成迭代器,并在for循环中完成对list下标和元素值的访问OM基本语句——breakbreak与C中break用法一样,该语句可以跳出循环,继续执行跟在“循环块”后的语句break可用在while循环和for循环中。break语句与if语句结合使用OM基本语句——continuecontinue和C中传统的continue用法一样,循环中遇到该语句,程序会终止当前循环,并忽略剩余的语句,然后回到循环的顶端。1、调用input函数获取用户输入,其参数为输入提示语句。遍历userlist进行匹配,如果存在即终止遍历for循环2、如果没有匹配的名字,则递减计数器,continue让用户重新输入3、如果有匹配的名字,break语句让while循环结束4、如果while循环结束都没有匹配到名字,则执行最后一个else语句块OM基本语句——再谈else在while,for循环后,也可以有else语句else语句缩进与while/for循环一致以覆盖循环终止条件的判定循环内break语句终止循环,不进入else语句块循环和条件语句辅助语句ifwhileforelif●else●●●break●●continue●●pass●●●OM基本语句——passpass如果在需要有语句块的时候不想写任何语句,可以使用pass。该语句在开发和调试很有用。deffoo_func():pass或是if user_input= “do_calc”:passelse:pass