您好,欢迎访问三七文档
一、字符串和编码1:Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符2:以Unicode表示的str通过encode()方法可以编码为指定的bytes,反过来,要把bytes变为str,就需要用decode()方法3:len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数4:由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:#!/usr/bin/envpython3#-*-coding:utf-8-*-第一行注释是为了告诉Linux/OSX系统,这是一个Python可执行程序,Windows系统会忽略这个注释;第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码格式化:%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。常见的占位符有:%d整数%f浮点数%s字符串%x十六进制整数二、使用list和tuplePython内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。list是一个可变的有序表,所以,可以往list中追加元素到末尾:classmates.append('Adam')classmates['Michael','Bob','Tracy','Adam']也可以把元素插入到指定的位置,比如索引号为1的位置:classmates.insert(1,'Jack')classmates['Michael','Jack','Bob','Tracy','Adam']要删除list末尾的元素,用pop()方法:classmates.pop()'Adam'classmates['Michael','Jack','Bob','Tracy']要删除指定位置的元素,用pop(i)方法,其中i是索引位置:classmates.pop(1)'Jack'classmates['Michael','Bob','Tracy']要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:classmates[1]='Sarah'classmates['Michael','Sarah','Tracy']list里面的元素的数据类型也可以不同,比如:L=['Apple',123,True]list元素也可以是另一个list,比如:s=['python','java',['asp','php'],'scheme']len(s)4要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:p=['asp','php']s=['python','java',p,'scheme']要拿到'php'可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。如果一个list中一个元素也没有,就是一个空的list,它的长度为0:L=[]len(L)0使用list和tuple阅读:533721listPython内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。比如,列出班里所有同学的名字,就可以用一个list表示:classmates=['Michael','Bob','Tracy']classmates['Michael','Bob','Tracy']变量classmates就是一个list。用len()函数可以获得list元素的个数:len(classmates)3用索引来访问list中每一个位置的元素,记得索引是从0开始的:classmates[0]'Michael'classmates[1]'Bob'classmates[2]'Tracy'classmates[3]Traceback(mostrecentcalllast):Filestdin,line1,inmoduleIndexError:listindexoutofrange当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates)-1。如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:classmates[-1]'Tracy'以此类推,可以获取倒数第2个、倒数第3个:classmates[-2]'Bob'classmates[-3]'Michael'classmates[-4]Traceback(mostrecentcalllast):Filestdin,line1,inmoduleIndexError:listindexoutofrange当然,倒数第4个就越界了。list是一个可变的有序表,所以,可以往list中追加元素到末尾:classmates.append('Adam')classmates['Michael','Bob','Tracy','Adam']也可以把元素插入到指定的位置,比如索引号为1的位置:classmates.insert(1,'Jack')classmates['Michael','Jack','Bob','Tracy','Adam']要删除list末尾的元素,用pop()方法:classmates.pop()'Adam'classmates['Michael','Jack','Bob','Tracy']要删除指定位置的元素,用pop(i)方法,其中i是索引位置:classmates.pop(1)'Jack'classmates['Michael','Bob','Tracy']要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:classmates[1]='Sarah'classmates['Michael','Sarah','Tracy']list里面的元素的数据类型也可以不同,比如:L=['Apple',123,True]list元素也可以是另一个list,比如:s=['python','java',['asp','php'],'scheme']len(s)4要注意s只有4个元素,其中s[2]又是一个list,如果拆开写就更容易理解了:p=['asp','php']s=['python','java',p,'scheme']要拿到'php'可以写p[1]或者s[2][1],因此s可以看成是一个二维数组,类似的还有三维、四维……数组,不过很少用到。如果一个list中一个元素也没有,就是一个空的list,它的长度为0:L=[]len(L)0tuple另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:classmates=('Michael','Bob','Tracy')现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素但是,要定义一个只有1个元素的tuple,如果你这么定义:t=(1)t1定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:t=(1,)t(1,)Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号条件判断:Elseif语句应elif表示。age=3ifage=18:print('adult')elifage=6:print('teenager')else:print('kid')elif是elseif的缩写input:birth=input('birth:')ifbirth2000:print('00前')else:print('00后')输入1982,结果报错:Traceback(mostrecentcalllast):Filestdin,line1,inmoduleTypeError:unorderabletypes:str()int()这是因为input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数。Python提供了int()函数来完成这件事情:s=input('birth:')birth=int(s)ifbirth2000:print('00前')else:print('00后')再次运行,就可以得到正确地结果。但是,如果输入abc呢?又会得到一个错误信息:小结Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!要注意定义可变参数和关键字参数的语法:*args是可变参数,args接收的是一个tuple;**kw是关键字参数,kw接收的是一个dict。以及调用函数时如何传入可变参数和关键字参数的语法:可变参数既可以直接传入:func(1,2,3),又可以先组装list或tuple,再通过*args传入:func(*(1,2,3));关键字参数既可以直接传入:func(a=1,b=2),又可以先组装dict,再通过**kw传入:func(**{'a':1,'b':2})。使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况使用递归函数的优点是逻辑简单清晰,缺点是过深的调用会导致栈溢出。针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。高级特性:1、切片L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tupletuple也是一
本文标题:python 学习
链接地址:https://www.777doc.com/doc-4210402 .html