目录
一、概述
1.编译型和解释型语言
2.Python的设计目标
3.Python特点
二、第一个Python程序
1.Python源程序格式
2.执行Python的方式
三、Python基础语法
1.算术运算符
2.变量
3.分支语句
4.while循环
5. 函数
6.模块
7.高级变量类型
1.列表
2.元组(Tuple)
3.字典
4.完整for循环
四、Python面向对象
1.可变类型和不可变类型
2.创建类
初始化方法
身份运算符
私有属性和私有方法
3. 继承
4.单例
单例实现:
5.异常
6.文件
总结
一、概述 1.编译型和解释型语言
编译型:程序之前前需要一个专门的编译过程,把程序编译成机器语言文件,运行时不需要重新编译。程序运行效率高,跨平台性差
解释型:程序不进行预先的编译,程序执行时逐行解释;运行效率较低但具有跨平台性
2.Python的设计目标简单直观的语言;开源,供任何人共同开发;易于理解;使用短期开发项目
3.Python特点完全面向对象;拥有一个强大的标准库;提供大量的第三方模块
二、第一个Python程序 1.Python源程序格式Python源程序是一个特殊格式的文本文件,可以使用任意文本编辑器;文件可扩展名.py
与大多数UNIX系统和服务不同,Windows系统没有预安装Python。为了方便直接使用Linux *** 作系统
print("hello python") print("hello hello world")
终端输入:python 文件路径
Python中代码必须整齐,不要有缩进;否则报错;初期不要加缩进
python2.x 版本不支持中文;pythonn3.x默认支持;下面使用python3运行程序
Python中的注释采用 # 进行单行注释;为了保证代码的整体,官方建议# 后面添加一个空格;如果和代码写在一行,建议代码和注释之间有两个空格
多行注释使用连续的引号,单引号或双引号都可以
我改用IDEA了(heihei)
2.执行Python的方式1.解释器类型
# 2.x 版本 语法: python 文件名
# 3.x 版本 语法: python3 文件名
2.交互型
命令行终端 输入:python后,输入python代码
缺点:适合小功能的语法学习,不方便大量程序编写;退出后(exit() / ctrl + D)代码不能保存
3.集成开发软件(PyCharm)
三、Python基础语法 1.算术运算符这里不同的就是 幂,采用两个**
* 运算符还可以用于字符串,用于重复 给定字符串相应的次数
2.变量print("test" * 10)输出:testtesttesttesttesttesttesttesttesttest
Python的变量只用第一次出现才算定义变量;Python中不需要指定数据的类型,程序运行时由解释器自动推断准确类型
数据类型分为:数字型和非数字型
数字型:int, float, bool, complex(复数型,主要用于科学计算,如波动问题,微积分)
非数字型:字符串,列表,元祖,字典
Python3中,int 和 long 被整合到一起,只有一个 int 类型,不需要进行区分
Python中,bool类型的true表示1, false表示0
数字型变量之间是可以直接进行计算的
变量的输入:使用函数input()
格式:字符串变量 = input("字符串提示信息")
类型转换函数:int(x), float(x)
输入格式化与其他语言类似, 如:
3.分支语句print("苹果价格 %f, 重量 %d, 共花费 %f" % (apple_price, apple_weight, money))
if 语句,书写格式:
if 条件判断:
成立执行的代码
Python中缩进使用Tab或者四个空格,建议使用空格
Python中不需要使用{}, 对于if中的多条语句使用缩进进行判断;
Python中的elif 中间没有空格,用于多分支判断
value = 17 if value >= 18: print("if内部") print("if第二句") # if语句结束部分 print("if外部")
Python中的逻辑连接词是 and, or, not
Python中没有自增运算
4.while循环让指定代码重复执行
Python中的print自带换行,如果不希望添加,可以在print内部加入end=“”
Python总的for循环,使用for ... in 进行迭代遍历
5. 函数Python中定义函数语法:def 函数名():
def sum(num1, num2): """对两个数进行求和""" return num1 + num2 res = sum(2, 3) print(res)
不用像其他语言指定返回值的类型
Python中函数的参数以及返回值都是引用类型;可以通过id()查看变量保存的地址;这里的传参应该参考java,和c语言不同
def swap(num1, num2): print(id(num1)) # 140725073575008 temp = num1 num1 = num2 num2 = temp print(id(num1)) # 140725073575040 return (num1, num2) # 当返回类型是元组的时候,小括号可以省略 num1 = 2 num2 = 3 print("%d - %d" % (num1, num2)) # 2 - 3 print(id(num1)) # 140725073575008 (num1, num2) = swap(num1, num2) print(id(num1)) # 140725073575040 print("%d - %d" % (num1, num2)) # 3 - 2
定义在函数外部的变量称为全局变量,函数内部不允许对全局变量进行修改;
如果在函数内部想要修改全局变量,只会在函数内部创建一个同名的局部变量
想要修改全局变量,需要在赋值语句前面使用global关键字声明变量
缺省参数:
缺省参数必须在函数参数列表的末尾
当含有多个缺省参数的时候,需要添加参数名
def print_info(name, gender_text="男生"): """ :param name: 姓名 :param gender_text: 性别,默认男生 :return: """ print(name, gender_text) print_info("小红") # 小红 男生 print_info("小红", "女生") # 小红 女生
多值参数:当出入的参数个数不确定
变量前面添加 * 表示元组;添加 ** 表示字典;
一般使用 *args 作为列表命名, ** kwargs表示字典
def demo(*args, **kwargs): print(args) print(kwargs) gl_nums = {1, 2, 3} gl_dict = {"name": "小明", "age": 18} # 拆包语法,在想要传递的相应的参数前面添加* 或 ** # 拆包可以简化元组和字典变量的传递 demo(*gl_nums, **gl_dict)6.模块
模块就好比是工具包,Python中以.py结尾的源代码文件都可以是一个模块,通过import进行导入;模块中的全局变量,函数可供外界访问
模块名也是一种标识符,所以只能由字母,下划线和数字组成,数字作为开头
导入的模块首先由Python解释器进行一次编译
局部导入:from 模块名 import 工具名
7.高级变量类型 1.列表导入的时候,导入文件中没有缩进的代码会被自动执行
为了避免导入的文件中不执行没有缩进的测试代码,可以使用__name__判断,如果是当前文件执行,__name__默认是__main__;否则,就是模块名
if __name__ == __main__: # 执行测试代码,可以将测试代码写到一个main()函数中 main()
其他语言中的数组,使用 [] 定义;可以存储不同类型的变量del 关键字将变量从内存中删除,后续的代码不能继续使用这个变量
2.元组(Tuple)与列表相似,不同的在于元组中的元素值不能被修改, 使用()定义
TypeError: 'tuple' object does not support item assignment
# 测试元组 tuple_array = () # 定义一个空元组 print(tuple_array) print(type(tuple_array)) tuple_array1 = (1, "asdfasdf", True) print(tuple_array1) print(type(tuple_array1)) tuple_array2 = (5) # 只有一个元素的元组 print(tuple_array2) print(type(tuple_array2)) #tuple_array3 = (5, ) # 定义只有一个元素的元组的时候,需要用逗号分隔 print(tuple_array3) print(type(tuple_array3)) #
可以使用list()和tuple()进行列表和元组之间的相互转换
3.字典类似map集合,使用键值对存储,内部无序;键 只能使用数字,字符串或者元组;键值对之间使用:分隔; 键必须唯一
使用{} 定义,一般存储物体的信息
字符串中的切片
公共方法
# 使用加号拼接列表,会生成一个新的列表 print([1, 2] + [3, 4]) list1 = [1, 2] list2 = [3, 4] list1.extend(list2) # 将列表追加到原来的列表中,不生成新列表 print(list1) # [1, 2, 3, 4] list1.append(list2) # 将 list2整体看做一个元素添加 print(list1) # [1, 2, 3, 4, [3, 4]]4.完整for循环
for ... in :
for循环中执行的代码
else
for循环中没有经过break退出,完成执行完for循环后会执行这段代码
四、Python面向对象 1.可变类型和不可变类型
可变类型:数字型,字符串和元组
不可变类型:列表,字典; 通过相应的方法可以 *** 作列表或字典中的数值;使用赋值改变地址
2.创建类字典的key只能使用不可变类型作为类型
class FirstClass: # 类中方法第一个参数必须是self, self就是方法调用对象的引用 def firstmethond(self, name): print("我是 %s 方法" % name) def secondmethond(self, name): print("我是 %s 方法" % name) # 创建一个类的实例 first = FirstClass() first.firstmethond("first")
初始化方法self 就类似 this 指针
Python中可以在类外通过 .属性名的方法添加属性,但是这种方法不推荐
如:first.name = "Tom"
类中的 __init__方法是Python中的内置方法,用于完成对象的创建和在类中定义属性
class FirstClass: # 初始化方法,完成对象的对象和属性的赋值 def __init__(self): print("这是一个初始化方法") self.name = "Tom" def first(self, name): print("%s 的名字是 %s" % (self.name, name)) firstObj = FirstClass() firstObj.first("first")
就是构造方法,同样可以 有参构造,传入参数就行
__del__: 也是内置函数,类似C++中的析构函数,java中由JVM自动完成对象的回收
__str__: 类似java中的toString()方法,自定义对象输出内容,必须返回一个字符串
身份运算符is / is not, 用于判断是否是对同一个对象的引用
Python中 身份运算符 比较的是两个对象的地址; == 比较的是两个对象的值是否相等;Python中针对 None 进行比较时建议使用 身份运算符
私有属性和私有方法在属性名或方法前面添加 两个下划线,就是私有的
3. 继承继承的语法:
class 类名(父类名):
pass
Python中支持多继承,当父类具有同名方法的时候,采用MRO搜索规则
MRO:可以使用内置函数 __mro__查看函数搜索顺序。
搜索的时候,首先在当前类中查找,如果有则停止,否则依次找下一个类,直到最后没有找到。
类也可以被看做一个对象,程序运行中被加载一次
类属性:定义在类中__init__以及其他方法外部,通过赋值语句定义类属性。与实例对象没有关系,表示一种全局概念
类方法:在方法定义上面添加修饰器@classmethod, 方法第一个参数必须是cls,作用与self类似
静态方法:当一个方法既不访问成员属性,成员方法,也不访问类属性和类方法,那么可以在方法上面添加 @staticmethod表示静态方法; 通过类名.的方式调用方法
4.单例__new__方法:内置的静态方法,在使用类名()创建对象的时候,调用该方法分配空间,并返回对象的引用作为初始化方法__init__的第一个参数self
重写__new__方法,重写规则:return super().__new__(cls)
单例实现:注意,这里需要手动传递cls
class Singleton(object): instance = None # 记录单例对象的引用 init_flag = False def __new__(cls, *args, **kwargs): # 判断类属性是否为空对象 if cls.instance is None: # 调用父类方法分配空间,返回对象引用 cls.instance = super().__new__(cls) return cls.instance # 用来判断执行一次初始化方法 def __init__(self): if not self.init_flag: print("初始化方法被调用") self.init_flag = True sing1 = Singleton() print(id(sing1)) # 1826555375304 sing2 = Singleton() print(id(sing2)) # 1826555375304 print(id(Singleton.instance))5.异常
try: # 程序尝试执行的代码 num = int(input("请输入一个整数:")) print(8 / num) except ZeroDivisionError: # 发生异常的代码 print("输入不能是0") except ValueError: # 其他错误类型捕获 print("输入应该是个整数") except Exception as result: # 处理其他未知错误 print("位置错误 %s" % result) else: # 只有当没有发生错误的时候执行 print("num的值:%d" % num) finally: # 无论是否发生异常,都会执行 print("程序运行结束")
finally的作用:保证即使有return语句,也会执行这部分代码
def fun(): try: # 程序尝试执行的代码 num = int(input("请输入一个整数:")) print(8 / num) except ZeroDivisionError: # 发生异常的代码 print("输入不能是0") except ValueError: # 其他错误类型捕获 print("输入应该是个整数") except Exception as result: # 处理其他未知错误 print("位置错误 %s" % result) else: # 只有当没有发生错误的时候执行 print("num的值:%d" % num) return finally: # 无论是否发生异常,都会执行 print("程序运行结束") print("try...except外部") fun()6.文件
文件写入的访问方式:
file = open("test.txt") # text = file.read() # print(text) while True: text = file.readline() if not text: break; print(text, end="") file.close()
read()方法读取全部内容,readline()读取一行内容
小文件复制:
file_read = open("test.txt") file_write = open("text1.txt", "r") text = file_read.read() file_write.write(text) file_read.close() file_write.close()
总结Python3中默认编码 UTF-8, Python2中编码ASCII
简单了解Python, 整理并不细致,一些概念还是比较模糊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)