python学习记录

2023-05-16

python学习记录

  • python学习
    • python运行顺序
      • 类的使用
      • 模块导入import
      • 不同级模块导入
      • 模块导入的重名问题:
      • 注意的点
    • 修饰器
  • 正则表达式

python学习

本文是关于python的学习记录文章。比较基本,比较潦草

python运行顺序

  1. 当运行某个文件的时候,则该文件中内置变量 __name__ 就会等于__main__,所以很多文件都会有这样的代码:
if __name__ == "__main__":
  1. 在一个文件中,函数(那些def定义的)只有被调用的时候才会执行。其余的没有缩进的代码会开始执行。换句话说整个py文件的运行是顺序执行的。当执行到定格写的if __name__ == “__main__”:则会再进行以后的函数调用。
  2. __name__是python的内置变量,用来表示程序的名称。这个变量语法上可以被修改,修改之后注意不能通过判断是否为__main__来执行。类似的内置变量还有:
【暂未实验】
__file__ 表示文件路径
__package__ :获取导入文件的路径,多层目录以点分割,注意:对当前文件返回None
__cached__ :获取导入文件的缓存路径
__name__ :获取导入文件的路径加文件名称,路径以点分割,注意:获取当前文件返回__main__ 
__name__  全局变量写在入口文件里,只有执行入口文件时的返回值才是__main__ ,如果入口文件被导入到别的文件里,此时入口文件的__name__返回值为模块名称
__builtins__ 【重点】内置函数在这里面
  1. 所以那些全局变量,不管定义在哪个函数前面或者后面,按照顺序是有可能先于函数执行的。

类的使用

类与实例
总结如下:

  1. 定义格式class 类名(继承类名): 。当没有父类时则使用object。所有的类最终都会继承到这个object类上。
  2. 其中有一个__init__函数相当于C++中的构造函数。当创建对象的时候则会直接调用__init__函数。
class Cat(object):
    def __init__(self):
        print("in construct Cat")
    def eat(self):
        print("in eat")
if __name__ == "__main__":
    print("in main.py")
    cat = Cat()
【输出】
in main.py
in construct Cat
  1. 类中函数第一个参数必须为self表示实例本身,self指向对象本身。相当于C++中的this指针。在有了__init__之后创建实例的时候就需要依照函数的参数来创建实例。self不需要传,python会自动把实例传入。
  2. 实例中的变量个数并不是固定的,也就是说,可以在类外面进行其他参数的赋值。但是注意函数的调用的问题
class Cat(object):
    def __init__(self, name):
        self.name = name
        print("in construct Cat")
    def eat(self):
        print("{} is eatting".format(self.name))
    def others(self):
        print("other arg is {}".format(self.test1)) 
if __name__ == "__main__":
    print("in main.py")
    cat1 = Cat("kite")
    cat1.test1="test1"   //给cat1加了一个test1的成员
    cat1.others()
    print("---------")
    cat2 = Cat("jhone")
    cat2.test2="test2"  //给cat2加了一个test2的成员
    #cat2.others()   //只要不执行这条语句就不会报错,因为cat2中并没有这个test1的成员。
  1. 在python3.7之后对类的构造函数进行了简化:(暂未实验)

模块导入import

python中模块间可以相互导入

  1. 使用import来导入模块。可以使用import <模块名>来导入整个模块,模块名就是那个文件*.py省略了后缀py。那么在后续使用整个导入模块中的函数的时候需要使用模块名.函数名的方式来调用。如下:
import test1   //同级目录下有一个test1.py的文件
def module1 ():
    test1.modl1_sub1()
    return "in test1.py module1"
  1. import导入模块会导入所有的函数,为了简便,可以只导入某个函数,那么就可以直接使用:
from test1 import modl1_sub1
def module1 ():
    modl1_sub1()
    return "in test1.py module1"
  1. 还可以重命名
from test1 import modl1_sub1 as sub1
def module1 ():
    sub1()
    return "in test1.py module1"
  1. 使用import语句并不一定要在文件头部。在任何一个位置都是可以的。只要在调用之前即可。这里说的调用之前是执行之前,并不是代码的先后顺序:
def module2():
    print("in main.py module2")
    print(os.__file__)     //1. 正确使用os模块
#print(os.__file__)    //2. 会报错
import os    //模块导入
print(os.__file__)     //3. 正常使用
if __name__ == "__main__":
    print("in main.py")
    print(os.__file__)    //4.正常使用
    module2()
【注释】
5. 在其中导入了模块os。
6. 整个文件的有关os的执行顺序是:2,3,4,1。模块导入时间是在2与3之间,所以2会报错,341正常执行。
  1. 模糊导入,可以通过通配*的方式导入多个包
from test1.test1 import *
if __name__ == "__main__":
   print("in main.py")
   test1_module1()   //是 test1.test1中的函数
   test1_module2()  //是test1.test1中的函数

不同级模块导入

当前目录结构如下:

.
├── main.py  
├── test1
│   └── test1.py
└── test1.py
  1. 主目录下有一个main.py的文件,同级目录下有一个test1.py的文件。在本目录下有一个test1的文件夹,这个文件夹名为test1,test1文件夹下有有一个test1.py。
  2. 那么在main.py中想要导入test1/test1.py下的模块可以这样使用:
1. 首先这个下级目录test1下创建一个空白的__init__.py文件(可以书写内容)。有了__init__文件那么整个文件夹会被看做一个整体的package。
2. 之后就可以通过from test1 import test1的方式表示从test1整个package(文件夹)中导入test1这个文件。也可以使用from test1.test1 import test1_module1来导入特定的函数。

模块导入的重名问题:

  1. 在main中同时导入test1/test1.py 和test1.py,也就是文件与包重名了。这样是会出问题的,包会覆盖文件的名字:也就是/test1/这个目录会覆盖test1.py这个文件。无法再导入test1.py中的内容了。
  2. 如果是多个文件中的函数重名,那么可以使用import … as 的方法。

注意的点

  1. 当import的时候,也会顺序执行这个模块。此时模块中__init__就不再是main而是模块名。
  2. 顺序执行的意思是如果这个模块有其他可以执行的语句那么也会执行:
[test1.py]内容如下:
def modl1_sub1():
        print("in test1.py ,modul1, sub1")
print("in test1.py, global print")
if __name__ =="test1":
    print("hit name test1")
那么当在另一个模块中使用 from test1 import modl1_sub1 as sub1 时
另一个模块中导入的位置会输出:
in test1.py, global print
hit name test1  //也说明了在调用的时候名字是test1,而不是main。 

修饰器

参考链接为:修饰器
修饰器的关键字就是@,其使用方法总结如下:

  1. funcA使用funcB修饰,则相当于执行funcA= funcB(funcA)。这个时候funcA的功能已经改变了。举个例子:
def modultest(test_func):
    def test():
        start_time = time.clock()
        a = test_func()
        end_time = time.clock()
        print("start_time: ", start_time, "end_time:", end_time)
        return a
    return test

@modultest
def module1 ():
    print("in test1.py, module1")
    return "in test1.py module1"

if __name__ == "__main__":
    print("in main.py")
    print("--------")
    mdl1 = module1()  //相当于module1=modultest(module)     mdl1=modul1()
    print("--------")
    print(mdl1)
    print("--------")

运行结果为:

in main.py
--------
in test1.py, module1
start_time:  0.042103 end_time: 0.042109
--------
in test1.py module1

正则表达式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python学习记录 的相关文章

  • 一起DIY四轴飞行器(三)添加实时操作系统--freeRTOS

    开发环境 xff1a Windows 软件 xff1a 1 STM32CubeMX 6 3 0 2 MDK 5 14 一 初识freeRTOS系统 1 什么是FreeRTOS xff1f Free 即免费的 xff0c RTOS 全称是 R
  • ESP8266 初次使用

    一 工具 1 ESP8266 01S 淘宝上搜索ESP8266 01S 引脚说明 xff1a 2 USB转串口 给设备供电3 3V xff08 官方说不要用USB转串口的3 3V xff0c 需要单独供电 xff09 xff0c USB转串
  • ubuntu安装boost

    ubuntu安装boost 系统 Ubuntu 18 04 boost中 xff0c 用到了别的函数库 xff0c 所以为了使用boost中相应的功能 xff0c 需要先安装系统中可能缺失的库 1 卸载已经安装的boost 删除 usr l
  • 简单的状态机图

    一 什么是状态机 xff1f 做产品的时候 xff0c 我们总能遇到一些比较复杂的逻辑问题 比如状态的转换 xff0c 字段状态的确认 xff0c 权限的控制 xff0c 状态的对应 而普通的流程图 xff0c 或时序图 xff0c 更侧重
  • js-对象转基本类型

    起因是收到朋友发的一道题 xff0c 如下 xff1a span class token comment 请在问号处填写你的答案 使下方等式成立 span span class token keyword let span a span c
  • 局域网内wakeonlan远程唤醒其它计算机

    背景 xff1a 需要管理多台计算机 xff0c 所有计算机在一个局域网内 xff0c 并且有的安装了Windows系统 xff0c 有的安装了Linux系统 我们想远程关闭和启动所有计算机 关闭计算机直接通过网络发生操作系统关机命令即可实
  • D3D中的三种Buffer

    在D3D中 针对视窗有三种Buffer 它们分别是 Color Buffer Depth Buffer和Stencil Buffer Color Buffer在D3D中又称为Render Target 意思是最后着色的目标Buffer 就是
  • 创建镜像(更新与构建镜像)

    创建镜像 有时从Docker镜像仓库中下载的镜像不能满足我们的要求 xff0c 此时可以基于这个镜像 xff08 基础镜像 xff09 封装一个自 己的镜像 两种方式 xff1a 更新镜像 xff1a 使用docker commit命令构建
  • (十)CMake链接已有的动态库

    使用一个已经存在的动态库 xff0c 需要用到CMake中两个命令 xff0c 分别是 xff1a link directoriestarget link libraries 下面先介绍以下两个命令的格式及其含义 xff0c 最后是一个使用
  • ROS入门21讲笔记(四)自定义话题消息类型和使用

    除了ROS内置消息外 xff0c 我们还能自定义消息 这一次我们不再与海龟较劲 xff0c 而是自定义一个订阅消息类型 xff0c 让订阅者和发布者通过这个结构进行数据通信 一 如何自定义话题消息 xff1f 话题消息是以 msg结尾的文件
  • ROS入门21讲笔记(七)自定义消息消息类型和使用

    这一节主要是学习如何自定义一个服务类型并使用它 一 如何自定义服务消息 xff1f 服务数据是以 srv结尾的文件 xff0c 是一个用于描述ROS服务信息简单文本文件 xff0c 用于生成不同语言消息的源代码 srv文件存放在packag
  • ROS入门21讲笔记(十二)常用可视化工具

    一 QT类可视化工具 1 1 rqt console rqt console 为显示和过滤ROS信息提供了一个GUI插件 1 2 rqt plot rqt plot使用不同的绘图后端提供数值可视化功能 1 3 rqt Image view
  • (二)CMake 使用头文件

    一 include directories 该命令用于增加一个编译头文件 其基本语法是 xff1a include directories span class token punctuation span span class token
  • cargo 宏展开遇到的问题

    最近学习rust xff0c 看到宏展开命令 span class token comment 单独文件 span rustc Z unstable options pretty span class token operator 61 s
  • 工程师笔记|常见的嵌入式软件工程师面试题

    Q xff1a 什么是ISR xff1f A xff1a ISR 是指中断服务程序 这些是存储在特定内存地址的函数 xff0c 当发生某种类型的中断时会调用这些函数 Cortex M 处理器系列具有管理中断执行的 NVIC Q xff1a
  • 计算机中的速率、带宽、时延、利用率解读

    计算机网络的性能一般是指它的几个重要的性能指标 但除了这些重要的性能指标外 xff0c 还有一些非性能特征 xff08 nonperformance characteristics xff09 也对计算机网络的性能有很大的影响 那么 xff
  • 手把手教你写链表,小学生看了都说好~

    摘要 xff1a 明明我们在之前已经接触了数组 xff0c 感到数组已经是万能的数据存储位置了 但是 xff0c 如果我们一直在使用比较复杂的数据 xff08 也就是比较多的数据时 xff09 xff0c 肯定会感到很反感 因为对于数组这种
  • 15-JavaScript高级程序设计-创建对象

    一 创建对象 创建单个对象 xff1a Object构造函数 new Object 对象字面量 xff08 参见8 Object amp Array xff09 创建多个对象 xff1a 以下7种方式 1 工厂模式 span class t
  • FreeRtos源码分析之启动任务调度vTaskStartScheduler(二)

    一 概述 FreeRtos在创建任务之后 xff0c 需要启动任务调度器才能使任务正常有序的运行 任务调度器的开启依赖于底层硬件 xff0c 对于CortexM3内核而言 xff0c 任务调度器需要用到中断和滴答定时器 FreeRtos在对
  • FreeRtos源码分析之任务状态管理(三)

    一 概述 FreeRtos的每一个任务都有一个对应的优先级 xff0c 较高优先级的任务具有优先运行的权利 xff0c 当高优先级的任务调用系统的延时函数或者需要阻塞等待某些信号时 xff0c 会让出CPU的使用权 xff0c 从而使低优先

随机推荐

  • FreeRtos源码分析之任务切换原理(四)

    一 CortexM3中断优先级 CortexM3支持多达240个外部中断和16个内部中断 xff0c 每一个中断都对应一个中断都对应一个优先级寄存器 每一个优先级寄存器占用8位 xff0c STM32采用其中的高四位来表示优先级 xff0c
  • ubuntu切换python版本

    一 概述 在ubuntu环境下进行嵌入式开发 xff0c 我们在进行不同的项目开发时 xff0c 可能会遇到python环境不统一的情况 这时 xff0c 我们可以通过update alternatives来方便更新ubuntu下的pyth
  • 本地Windows远程连接阿里云服务器图形界面(使用vnc viewer)

    文章目录 前言Motivation of writing1 场景说明2 给阿里云服务器安装图形界面3 给服务器配置VNC Server4 让服务器放行5901端口5 本地windows配置vnc viewer总结 标题 xff1a 本地Wi
  • 十分钟教你配置frp实现内网穿透

    十分钟教你配置frp实现内网穿透 一 frp的作用 利用处于内网或防火墙后的机器 xff0c 对外网环境提供 http 或 https 服务 对于 http https 服务支持基于域名的虚拟主机 xff0c 支持自定义域名绑定 xff0c
  • 5.7.4 ARM微控制器外设:I2C编程实例—加速度传感器

  • Jetson带CUDA编译的opencv4.5安装教程与踩坑指南,cmake配置很重要!

    环境 xff1a Jetson NX 43 Jetpack4 4 43 Ubuntu18 04 0 jtop前后对比1 安装教程2 踩坑指南2 1 cv2 error OpenCV 4 4 0 tmp pip build 2do2xloi
  • C++ 获取系统当前时间

    C 43 43 获取系统当前时间 c 43 43 time函数 C 43 43 的日期和时间函数获取系统当前时间实例大体思路具体使用与解析四 回顾与梳理 c 43 43 time函数 C 43 43 的日期和时间函数 C 43 43 标准库
  • KAFKA结构图

    转载 https blog csdn net sillyzhangye article details 86181323 utm medium 61 distribute pc relevant none task blog BlogCom
  • vue-企业微信绑定和解绑

    一 企业微信绑定解绑 项目中需要对账号进行企业微信的绑定和解绑 企业微信页面显示 xff1a span class token operator lt span FormItem label span class token operato
  • cannot currently show the desktop 树莓派 vnc viewer 无法显示的解决方法

    文章由来 2021 04 24 xff0c 周六 xff0c 一个人在家没什么事情 xff0c 突然发现了自己的树莓派4B xff0c 那个时候就买来的时候用了一会 xff0c 今天突然想用它搭一个服务器 那个时候玩的时候资料没有整理 xf
  • AI就是闭上眼想要一份凉皮,睁开眼就会有一份凉皮摆在眼前

    回答这个问题之前 xff0c 先听下这段对话 xff1a 你愿意让别人帮你干活吗 xff1f 愿意 xff01 那么你愿意让别人干你的活吗 xff1f 愿意 最后问你 xff0c 你愿意让别人替代你吗 xff1f 作为一个对AI没有过深的了
  • 什么是主线程?

    主线程 是执行主 main 方法的线程 单线程程序 java程序中只有一个线程 执行从main方法开始 从上到下依次执行 主线程的概念 JVM执行main方法 main方法会进入到栈内存 JVM会找操作系统开辟一条main方法通向cpu的执
  • Python爬虫Xpath方法返回值有[]引号等问题解决方法

    在搞Python爬虫的时候会使用到Xpath方法 xff0c 比如在爬取某个链接的时候返回值会是 39 http www baidu com demo jpg 39 示例链接 而后面的代码会因为有这几个字符串而受到影响 解决方法 xff1a
  • error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable

    k8s报error no configuration has been provided try setting KUBERNETES MASTER environment variable错误解决方法1 18 1版本 使用vi编辑器打开
  • ubuntu 安装PHP+Apache

    安装Apache sudo apt install apache2 安装PHP 7 4 Ubuntu 20 04默认安装的版本 sudo apt install php libapache2 mod php 安装完成重启Apache服务 s
  • ASCII码判断大小

    ASCII码的值大小排列 xff1a a z gt A Z gt 0 9 在小写字母中z最大 xff0c a最小 在大写字母中Z最大 xff0c A最小 在0到9中 9最大 xff0c 0最小 故选D选项
  • 二进制运算相关的题目

    将二进制数01011010 转换成十进制数 xff0c 然后将十进制数 x 2 得到的值将其化为二进制数 01011010 十进制数为90 180 二进制数为10110100 故选C选项
  • 重装Ubuntu系统及系列软件安装

    重装Ubuntu系统及系列软件安装 1 安装ubuntu20 04 03系统下载Ubuntu20 04 03系统更换系统apt的源 2 CUDA和cudnn安装下载CUDA安装包并安装 3 pycharm的安装 4 conda的安装 5 兼
  • Qt中UI对象只能在主线程中操作,那如何在子线程中操作UI呢

    为什么在Qt中UI对象只能在主线程中操作 在Qt中 xff0c UI对象只能在主线程中操作 xff0c 因为Qt采用了事件循环机制 xff0c UI事件 xff08 如鼠标点击 键盘输入 xff09 都是在主线程中处理的 如果在子线程中直接
  • python学习记录

    python学习记录 python学习python运行顺序类的使用模块导入import不同级模块导入模块导入的重名问题 xff1a 注意的点 修饰器 正则表达式 python学习 本文是关于python的学习记录文章 比较基本 比较潦草 p