Python学习

Python学习,第1张

Python学习

目录

一、概述

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.算术运算符

        这里不同的就是 幂,采用两个**

        

* 运算符还可以用于字符串,用于重复 给定字符串相应的次数

print("test" * 10)

输出:testtesttesttesttesttesttesttesttesttest

2.变量

        Python的变量只用第一次出现才算定义变量;Python中不需要指定数据的类型,程序运行时由解释器自动推断准确类型

        数据类型分为:数字型和非数字型

        数字型:int, float, bool, complex(复数型,主要用于科学计算,如波动问题,微积分)

        非数字型:字符串,列表,元祖,字典

Python3中,int 和 long 被整合到一起,只有一个 int 类型,不需要进行区分

Python中,bool类型的true表示1, false表示0

数字型变量之间是可以直接进行计算的

        变量的输入:使用函数input() 

  格式:字符串变量 = input("字符串提示信息")

        类型转换函数:int(x), float(x)

输入格式化与其他语言类似, 如:

print("苹果价格 %f, 重量 %d, 共花费 %f" % (apple_price, apple_weight, money))

3.分支语句

        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 工具名

导入的时候,导入文件中没有缩进的代码会被自动执行

为了避免导入的文件中不执行没有缩进的测试代码,可以使用__name__判断,如果是当前文件执行,__name__默认是__main__;否则,就是模块名

if __name__ == __main__:
    # 执行测试代码,可以将测试代码写到一个main()函数中
    main()
7.高级变量类型         1.列表

        其他语言中的数组,使用 [] 定义;可以存储不同类型的变量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.可变类型和不可变类型

        可变类型:数字型,字符串和元组

        不可变类型:列表,字典; 通过相应的方法可以 *** 作列表或字典中的数值;使用赋值改变地址

字典的key只能使用不可变类型作为类型

2.创建类
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, 整理并不细致,一些概念还是比较模糊

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5700921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存