首页 > 编程语言 >python基础学习6和7

python基础学习6和7

时间:2024-12-01 22:10:22浏览次数:6  
标签:__ name python self 基础 学习 print os def

模块类与对象

  • 模块

    内置模块 time, random, os, json

    第三方模块 requests, pandas, numpy,....

    自定义模块 xxx.py

    常见的内置模块
  • hashlib 模块

    该模块主要是进行数据加密的作用。

    常见的加密方式:sha256()【可逆】 md5()【不

    可逆】

    import hashlib
    info = '123456'
    # 创建hashlib中的加密对象
    md5_obj = hashlib.md5()
    # 设置编码
    md5_obj.update(info.encode('UTF-8'))
    # 调用函数,开始加密
    mi_wen = md5_obj.hexdigest()
    print(f"明文:{info},通过md5加密后得到密文:
    {mi_wen}") #
    e10adc3949ba59abbe56e057f20f883e
    

    一般情况下,在企业中,若想要对一个明文进行MD5

    加密的话,一般都不是直接进行加密,而是先对名进

    加盐操作,之后才会进行md5加密。

    import hashlib
    info = '123456'
    # 创建hashlib中的加密对象
    md5_obj = hashlib.md5('shujia'.encode('UTF-
    8')) # 加盐操作
    # 设置编码
    md5_obj.update(info.encode('UTF-8'))
    # 调用函数,开始加密
    mi_wen = md5_obj.hexdigest()
    print(f"明文:{info},通过md5加密后得到密文:
    {mi_wen}") #
    0ead149c250ec554aff85fa083312a83
    
    json模块

    本质上是一个特殊格式的字符串,但是相比较于字符

    串而言,json是可以通过键获取值的。

    判断一个字符串是否符合json的格式:

    看字符串是否是由双引号括起来,若不是,那么该

    字符串转不了json格式数据

    若值是由小括号括起来的多个元素,也是不能够转

    json格式数据的

  • 序列化:将代码中的数据转化成网络中传输的数据流

    【python中的字典数据 --> json格式的字符串】

    import json
    dict1 = {
    'name': '黄沪生'
    ,
    'age': 18,
    'likes': ['踢足球'
    ,
    '钓鱼'
    ,
    '打游戏'],
    'pets': [
    {'name': '小花'
    ,
    'age': 2},
    {'name': '小黑'
    ,
    'age': 3}]
    }
    s3 = json.dumps(dict1, ensure_ascii=False)
    print(s3, type(s3))
    
  • 反序列化:将网络中传输的数据流还原成代码中的数

    据格式 【json格式的字符串 --> python中的字典数

    据】

  • import json
    # s2 ='''{"name":"黄沪生","age":18,"likes":["踢足球","钓鱼","打游戏"]}
    # '''
    # print(s2, type(s2))
    # # print(s2['age'])
    # res1 = json.loads(s2)
    # print(res1, type(res1))
    

时间相关的模块

time

import time
res1 = time.time() # 得到的是一个时间戳格式的数
据
print(res1, type(time)) # 2024-11-29
10:45:58

时间戳存储时占用的字节相比较于格式化后的字符串

而言,是少很多的。

datetime

![image-20241129194721135](D:\soft\Typora\python基础 .assets\image-20241129194721135.png)

时间戳,datetime, 格式化日期字符串互相转换

import time
from datetime import datetime
#
# res1 = time.time() # 得到的是一个时间戳格式的数据
# print(res1, type(time)) # 2024-11-29

# '2024年11月29日 10时51分00秒'
# datetime -> str 日期格式化
s1=datetime.now()
print(s1)
res1 = datetime.strftime(s1,'%Y-%m-%d %H:%M:%S')
print(res1)
print("-------------------------------")
# time.time()
# 时间戳 -> datetime
tp = time.time() # 当前的时间戳
print(tp)
res2 = datetime.fromtimestamp(tp)
print(res2, type(res2))
# datetime -> str
res3 = datetime.strftime(res2,'%Y/%m/%d %H:%M:%S')
print(res3, type(res3))
print("-------------------------------")
# 字符串 -> datetime
s2 = '2024/11/29 11:02:28'
d2 = datetime.strptime(s2,'%Y/%m/%d %H:%M:%S')
print(d2, type(d2))
# datetime-> 时间戳
tp2 = d2.timestamp()
print(int(tp2))

date还有一种方式可以时间获取年月日时分秒, 使用

datetime对象中的属性

tp = 1732849348
dt1 = datetime.fromtimestamp(tp)
print(f"{dt1.year}年{dt1.month}月{dt1.day}
{dt1.hour}时{dt1.minute}分{dt1.second}秒")

OS模块

使用os模块中的功能操作文件或者文件夹

  • 判断目标是否存在
import os
# data/user_info
b = os.path.exists('C:\projects\PycharmProjects\\bigdata33\day07\data\\user_info')
print(b) # True
  • 路径拼接
import os
s1 = os.path.join('data','user_info')
print(s1,type(s1))
if os.path.exists(s1):
    f = open(s1,'r',encoding='UTF-8')
    text1 = f.read()
    print(text1)
else:
    print("目标路径不存在!")
  • 获取当前文件所在的路径
ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
print(ml1, type(ml1))
  • 获取某一个文件所处的父级目录路径
ml2 = os.path.dirname(ml1)
print(ml2,type(ml2))
  • 判断一个路径是否是文件

ml1 = os.path.abspath(__file__) # __file__ 代表的是当前的文件
print(ml1, type(ml1))
ml2 = os.path.dirname(ml1)
print(ml2,type(ml2))
print(os.path.isfile(ml1)) # True
print(os.path.isfile(ml2)) # False
print(os.path.isdir(ml1)) # False
print(os.path.isdir(ml2)) # True
  • 判断一个路径是否是文件夹
ml1 = os.path.abspath(__file__) # __file__
代表的是当前的文件
print(ml1, type(ml1))
ml2 = os.path.dirname(ml1)
print(ml2,type(ml2))
print(os.path.isdir(ml1)) # False
print(os.path.isdir(ml2)) # True
  • 创建一个文件夹
lj1 = os.path.join('data','aaa')
os.mkdir(lj1)

注意:

若要创建一个文件夹,使用os模块中的mkdir函数

若要创建一个文件,使用open函数以写的方式打

ml1 = os.path.abspath(__file__) # __file__
代表的是当前的文件
ml2 = os.path.dirname(ml1)
res1 = os.walk(ml2)
'''
a1: 表示遍历到的文件夹的名称
b1: 表示遍历到的文件夹下所有的文件夹名称组成的列表
c1: 表示遍历到的文件夹下所有的文件名称组成的列表
'''
for a1,b1,c1 in res1:
print(f"a1:{a1}")
print(f"b1:{b1}")
print(f"c1:{c1}")
print("----------------------")
  • 删除路径
    • 若目标路径是一个文件
lj1 = os.path.join('data','bbb')
os.remove(lj1)
  • 若目标文件是个文件夹
lj1 = os.path.join('data','aaa')
os.rmdir(lj1)
os模块练习

练习1:企业中有一个网站,每一天都有新的用户

注册,要求每一天需要使用一个新的文件存储当天

注册的用户信息。

自定义模块
第三方模块

类和对象

面向对象概述
面向过程的编程思想:每一步的实现过程都是我们一步一步
参与实现的,相当于参与者
【代表语言:C语言】
面向对象的编程思想:我们在自己程序中,创建别人写好类
的对象,调用别人写好的功能,相当于指挥者 
【代表语言:java,python】
举例现实生活中面向对象的例子:
吃饭:
面向过程的角度:自己买鸡蛋,自己打鸡蛋,自
己煮饭,自己将蛋和饭一起炒,自己装盘
面向对象的角度:点一份蛋炒饭,饭店人员完成
上面的事情
接水:
面向过程的角度:自己拿起水杯,走到饮水机面
前,选择热水还是冷水,接水
面向对象的角度:祈求同桌接水,剩下事情,由
同桌这个对象去完成
如何在python中描述或者使用现实生活中的一个对象呢?
1. 需要我们先创建一个概念性的东西,用于描述某一种所
有对象的共同特点,在python中称之为类 class
2. 我们就可以根据创建好的类,来创建若干个对象
世间万物,皆为对象,同一种对象之间,会有相同的特点,
都可以使用属性和行为对任意一个对象进行描述。
人:                                     class Person:
属性:姓名,年龄,性别...                   成员变量:name,age,gender
行为:吃饭,睡觉,学习...                   成员方法:eat(),sleep(),study()
创建类和对象

注意:class类中的函数,必须要有一个参数,且是第一个定义,self self: 表示当前调用该方法的对象

创建类:类名首字母要大写

init方法里面的参数就是这个是对象的属性值,在创建类的时候进行定义,创建对象的时候进行赋值,且每一个对象都有这些属性

self.属性或者方法,这是代表时类内部的属性或者方法
class 类名:
    def __init__(self,属性1,属性2,...属性n):
        self.属性1 = 属性1
        self.属性2 = 属性2
        . . .
        self.属性n = 属性n
    def method1(self):
        pass
    def method2(self):
        pass

创建对象:创建的类有多少个属性,则根据这个类创建对象的时候就传入几个参数,一个类可以创建多个对象

对象1 = 类名(属性1,属性2,...属性n)
...
对象n = 类名(属性1,属性2,...属性n)

属性赋值【针对类中没有创建属性的情况】:

# 在外部对对象的属性进行赋值
对象.属性 = 参数
面向对象编程那些改进场景
  • 可以改进多个传参的问题

    # 改进前,需要进行多次定义参数列表和传参
    def fun1(a1,b1,c1,d1):
     pass
    def fun2(a1,b1,c1,d1):
     pass
    def fun3(a1,b1,c1,d1):
     pass
    fun1(11,22,33,44)
    fun2(11,22,33,44)
    fun3(11,22,33,44)
    
    #改进后,这样每次调用fun就都会有四个属性值,只需要进行一次传参
    class Demo:
        def __init__(self,a1,b1,c1,d1):
            self.a1 = a1
            self.b1 = b1
            self.c1 = c1
            self.d1 = d1
        def fun1(self):
            pass
        def fun2(self):
            pass
        def fun3(self):
            pass
    
  • 改进某一个事物的封装

    class Person:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __str__(self):
            return f"name:{self.name},age:{self.age}"
    
    user_list = []
    for i in range(1,4):
        name = input("请输入你的名字:")
        age = input("请输入你的年龄:")
        p = Person(name,age)
        user_list.append(p)
        
    for p in user_list:
        print(p.__str__())
    for p in user_list:
        print(p)
    # 最后两个for结果一样
    

    注意:一个类一旦创建了,一定至少有两个方法:

    # __init__()
    相当于构造函数,对属性进行赋值
    # __str__()
    这个在打印对象的时候进行调用,前提没有指定调用某个函数,就默认调用__str__()方法
    
面向对象的三大特征
封装
  • 属性与方法的私有化

    私有化的属性与方法除了类就不能在进行调用,只能在类的内部自己调用,可间接性地通过没有私有化的方法去调用私有化的属性与方法

    class Person:
        def __init__(self,name,age):
            self.__name = name
            self.__age = age
    
        def set_name(self,name):
            self.__name = name
        def get_name(self):
            return self.__name
        def __eat(self):
            print("人是铁,饭是钢,一顿不吃饿得慌!")
        def fun(self):
            self.__eat()
        def __str__(self):
            return f"name:{self.name},age:{self.age}"
    
    p = Person('fz',18)
    print(p.get_name())
    p.fun()
    
继承

继承是将多个类中的相同的部分,单独提取到一个类 中,这些类于单独提出来的这个类产生一个关系 这个关系,就叫做继承关系,其他类中也就拥有了相 同的部分,不需要特地定义出来。

总结:子类继承父类,父类有的子类一定有,父类没有的子类也可以有

  • 通过继承,子类拥有了父类中的成员(私有成员除外)

    class Fu:
     def fun1(self):
        print("好好学习,天天向上!")
     def __fun2(self):
        print("这是父类中私有的成员函数__fun2")
    class Son(Fu):
     pass
    s1 = Son()
    s1.fun1() # 好好学习,天天向上!
    s1.__fun2() # 报错
    
  • 若子类中出现与父类的函数名以及函数参数都一样, 只是实现不一样的情况,子类对象调用的是自己的函数

    注意:这样的函数称之为函数的重写 override

    class Fu:
     def fun1(self):
      print("好好学习,天天向上!")
     def __fun2(self):
      print("这是父类中私有的成员函数__fun2")
     def fun3(self):
      self.__fun2()
    class Son(Fu):
     def fun1(self):
      print("这是子类中的函数fun1")
      pass
    
    s1 = Son()
    s1.fun1() # 这是子类中的函数fun1
    
  • 子类中可以使用super()来调用父类中非私有的成员

    class Fu:
     def fun1(self):
      print("这是父类中的fun1")
    class Zi(Fu):
     def fun1(self):
      print("这是子类中的fun1")
     def show(self):
      self.fun1()  # 调用的是子类中重写后的fun1函数
    # 调用父类中的fun1
      super().fun1()
    z = Zi()
    z.show()
    
  • 若同时继承的类中有相同的函数名,谁先写就调用谁的

    class Fu:
     def fun1(self):
      print("这是父亲中的函数fun1")
     def show(self):
      print("这是父亲中的函数show")
    class Mather:
     def fun2(self):
      print("这是母亲中的函数fun2")
     def show(self):
      print("这是母亲中的函数show")
    class Son(Mather,Fu):
     def function1(self):
      print("这是儿子自己的函数")
    s1 = Son()
    s1.show() # 这是母亲中的函数show
    
多态

表示的是某一个事物在不同时刻下的不同状态

在python中默认支持多态,因为python是动态数

据类型语言

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return f"name:{self.name}, age:{self.age}"
    def eat(self):
        print("吃")
    def sleep(self):
        print("睡")

class Dog(Animal):
    pass
a1 = Animal('小黄',2)
a1 = Dog('小黑',3)
print(a1)
# Animal a = new Dog('小黑',3)
抽象
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"name:{self.name}, age:
{self.age}"
@abstractmethod
def eat(self):
pass
@abstractmethod
def sleep(self):
pass
class Dog(Animal):
@override
def eat(self):
print("

标签:__,name,python,self,基础,学习,print,os,def
From: https://www.cnblogs.com/lanzhi666/p/18580440

相关文章

  • [Python学习笔记4]——函数
    目录 1.函数的定义2.传递实参2.1位置实参2.2关键字实参2.3给形参指定默认值3.返回值3.1返回简单值3.2将形参的默认值指定为空字符串以实现实参可选3.3返回字典或列表4.传递列表4.1向函数传递列表4.2在函数中修改列表4.3禁止函数修改列表(使用列表切......
  • 2024-2025-1 20231309《计算机基础与程序设计》第九周助教总结
    课程答疑现阶段,大家都主要在学习C语言编程,时不时会遇到程序不会写,报错不会改的问题。而出现此类问题的主要原因包括:算法不熟悉,如写不出素数的判断等解决方案:多熟悉学习常见的简单算法包括比大小,判断素数等语法不熟悉,如赋值和判断语句等解决方案:多熟悉课本和PPT相关内......
  • 2.C基础
    1.注释单行注释//多行注释/**/程序运行后生成的.obj文件里不带注释的内容/*include表示包含std:标准的i:输入Inputo:输出Output*/#include<stdio.h>//预处理//int表示程序运行的结果是整数与return0相呼应//main()函数是程序的主入口固定指定为mainin......
  • Python.task4
    Python.task4定义*函数使用关键字def,后跟函数名与括号内的形参列表。*函数内容以冒号起始,并且缩进。*return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。调用参数默认参数为参数指定默认值是非常有用的方式。调用函数时,可以使用......
  • 【NLP 3、深度学习简介】
    列夫托尔斯泰写:“如果你能感受到痛苦,那么你还活着;如果你能感受到他人的痛苦,那么你才是人”                                                         ......
  • 大数据学习记录,Python基础(3)
    算术运算符```pythona=3b=4print(a+b)#7print(a-b)#-1print(a*b)#12print(a/b)#0.75print(a%b)#3print(a**b)#81print(a//b)#0整除比较(关系)运算符注意:=是赋值运算符,==是比较运算符比较运算符的结果一定是bool类型的扩......
  • 【学习笔记】(三)SpringBoot项目bean的创建与加载流程
    导语上一章从一个相对粗粒度的层面介绍了springboot启动的大致流程,本章将结合上一章介绍的内容,更进一步地介绍bean是怎么来的,bean是如何被创建和加载流程。上一章的传送门:SpringBoot项目启动流程介绍文章目录导语自动配置和自动装配分别指的是什么?大致流程一、bean相......
  • Devfreq学习笔记
    一、简介当今的复杂SoC由多个子模块协同工作组成。在执行各种用例的操作系统中,并非SoC中的所有模块都需要始终保持最高性能。为方便起见,将SoC中的子模块分组为域,从而允许某些域以较低的电压和频率运行,而其他域以较高的电压/频率对运行。对于这些设备支持的频率和电压对,我们称之......
  • C++ 学习笔记(3):引用和指针
    前言前几天问GPT问的,单独拎出来当作笔记的一个补充吧。指针的基本概念指针(Pointer)是一个变量,它存储的是另一个变量的内存地址。在C++中,定义一个指针变量时使用*符号,这个符号并不是表示解引用,而是表示这个变量是一个指针变量,指向某种类型的数据。例子inta=5;int*p......
  • 《计算机基础与程序设计》第十周学习总结
    学期(2024-2025-1)学号(20241412)《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程<班级的链接>2024-2025-1-计算机基础与程序设计这个作业要求在哪里<作业要求的链接>2024-2025-1计算机基础与程序设计第十周作业这个作业的目标信息系统数据......