# python **Repository Path**: zou-gode/python ## Basic Information - **Project Name**: python - **Description**: python的学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-24 - **Last Updated**: 2022-11-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、Python简介 ## 1.1 Python简介 Python是一个高层次的结合了解释性、编译性、互动性和面向对象的`脚本语言` * Python是一种解释性语言:这意味开发过程中没有了编译这个环节。类似PHP和Perl语言 * Python是交互语言:这意味着,你可以在一个Python提示符`>>>`后直接执行代码 * Python是面向对象语言:这意味着Python支持面向对象的风格或代码封装在对象的编程技术 ## 1.2 Python的特点 ### 1.2.1 优点 1. **易于学习** :Python有相对较少的关键字,结构简单,和一个明确定义的语法,学起来更加简单 2. **易于阅读**:Python代码定义清晰 3. **易于维护**:Python的源代码是想到容易维护的 4. **一个广泛的标准库**:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。 5. **互动模式**:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。 6. **可移植性**:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。 7. **可拓展**:可以使用c或c++完成部分编译 8. **数据库**:Python提供所有主要的商业数据库的接口。 9. **GUI编程**: Python支持GUI可以创建和移植到许多系统调用。 10. **可嵌入**:可以将Python嵌入到c/c++程序,让你的程序的用户获得`脚本化`的能力 ### 1.2.2缺点 1. **运行速度慢**,但可以用c++改写关键部分,提高速度 2. **国内市场较小** 3. **中文资料匮乏** 4. **构架选择太多** # 二、Python的变量类型 * Numbers(数字) * String(字符串) * List(列表) * Tuple(元组) * Dictionary(字典) ## 2.1 Numbers(数字) * int(有符号整型) * long(长整型,也可以代表8进制和16进制) * float(浮点型) * complex(复数) ## 2.2 Python 列表(List) ```py list = ['a',1,"2"] list2 = [1,2,3] print(list) # 输出完整列表 print(list[0]) # 输出列表的第一个元素 print(list[1:3]) # 输出第二个至第三个元素 print(list[2:]) # 输出从第三个开始至列表末尾的所有元素 print(list)*2 # 输出列表两次 print(list+list2) # 打印组合的列表 ``` ## 2.3 Python 元组 元组是另一个数据类型,类似于 List(列表)。 元组用 `()` 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。 ```py tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 ) tinytuple = (123, 'john') print tuple # 输出完整元组 print tuple[0] # 输出元组的第一个元素 print tuple[1:3] # 输出第二个至第四个(不包含)的元素 print tuple[2:] # 输出从第三个开始至列表末尾的所有元素 print tinytuple * 2 # 输出元组两次 print tuple + tinytuple # 打印组合的元组 ``` ## 2.4 Python 字典(dictionary) * 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。 * 两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。 * 字典用"{ }"标识。字典由索引(key)和它对应的值value组成。 ```py dict = {} dict['one'] = "This is one" dict[2] = "This is two" tinydict = {'name': 'runoob','code':6734, 'dept': 'sales'} print dict['one'] # 输出键为'one' 的值 print dict[2] # 输出键为 2 的值 print tinydict # 输出完整的字典 print tinydict.keys() # 输出所有键 print tinydict.values() # 输出所有值 ``` # 三、Python 函数 ## 3.1 定义一个函数 * 函数代码块以 `def` 关键词开头,后接函数标识符名称和圆括号()。 * 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。 * 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。 * 函数内容以冒号起始,并且缩进。 * return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return相当于返回 None。 ```py def printme( str ): "打印传入的字符串到标准显示设备上" print str return ``` ## 3.2 不定长参数 加了星号(*)的变量名会存放所有未命名的变量参数。 ```py def aa(*str): print(str) return aa("aa",12,"w") # ("aa",12,"w") ``` ## 3.3 匿名函数(lambda) python 使用 lambda 来创建匿名函数。 * lambda只是一个表达式,函数体比def简单很多。 * lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 * lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。 * 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。 ```py sum = lambda num1,num2:num1+num2 print(sum(10,20)) # 30 ``` # 四、Python 文件的I/O ## 4.1 打印到屏幕 最简单的输出方法是用`print`语句 ## 4.2 读取键盘输入 * raw_input * input ### 4.1.1 raw_input raw_input 在Python 2.x中,在Python 3.x不能使用,可用input替换 raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符 ```py str = raw_input("请输入:") print("你输入的内容是"+str) ``` ### 4.1.2 input nput([prompt]) 函数和 raw_input([prompt]) 函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回。 ```py str = input("请输入:") print("你输入的内容是"+str) ``` ## 4.3 打开和关闭文件 ### 4.3.1 open() 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。 ```py file object = open(file_name [, access_mode][, buffering]) # open完整语法格式 open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) ``` * file_name: 访问的文件名称的字符串值 * access_mode: 打开文件的模式: 只读,写入,追加等。这个参数是非强制的,默认为只读(r) * buffering: 如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。 * file: 必需,文件路径(相对或者绝对路径)。 * mode: 可选,文件打开模式 * buffering: 设置缓冲 * encoding: 一般使用utf8 * errors: 报错级别 * newline: 区分换行符 * closefd: 传入的file参数类型 * opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。 不同模式打开文件的完全列表: ```txt t 文本模式 (默认)。 x 写模式,新建一个文件,如果该文件已存在则会报错。 b 二进制模式。 + 打开一个文件进行更新(可读可写)。 U 通用换行模式(不推荐)。 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 ``` ### 4.3.2 File对象的属性 |属性|描述| | ----------- | ----------- | |file.closed| 返回true如果文件已被关闭,否则返回false。| |file.mode |返回被打开文件的访问模式。| |file.name| 返回文件的名称。| |file.softspace |如果用print输出后,必须跟一个空格符,则返回false。否则返回true。| ## 4.4 文件的读写 ```py file = open("aaa.txt","a") # 打开文件,只写入,指针在最后 file.write("\nhello") # 换行写入内容 file.close() # 关闭文件 file = open("aaa.txt","r+") # 打开文件,读写,文件指针将会放在文件的开头。 str = file.read() print(str(10)) # 读取10个字符 file.close() ``` ## 4.5 文件的重命名和删除文件 ### 4.5.1 rename(old_name,nwe_name) 需要导入os库 ```py import os # 重命名文件test1.txt到test2.txt。 os.rename( "test1.txt", "test2.txt" ) ``` ### 4.5.2 remove() 你可以用remove()方法删除文件,需要提供要删除的文件名作为参数。 ```py import os # 删除一个已经存在的文件test2.txt os.remove("test2.txt") ``` ## 4.6 Python里的目录 ### 4.6.1 mkdir() 可以使用os模块的mkdir()方法在当前目录下创建新的目录们。你需要提供一个包含了要创建的目录名称的参数。 ```py import os # 创建目录test os.mkdir("test") ``` ### 4.6.2 getcwd() ```py import os # 给出当前的目录 str = os.getcwd() print(str) ``` ### 4.6.3 rmdir() rmdir()方法删除目录,目录名称以参数传递。 在删除这个目录之前,它的所有内容应该先被清除。 ```py import os # 删除”/tmp/test”目录 os.rmdir( "/tmp/test" ) ```