python学习笔记

# 一、python 基础

  1. python 函数参数:

    • 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

    以下是调用函数时可使用的正式参数类型:

  • 必备参数: 按顺序传入

  • 关键字参数: 不用按顺序,必须有关键字(词典)

    • 命名关键字参数

    • ## 对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过`kw`检查。
      def person(name, age, **kw):
          if 'city' in kw:
              # 有city参数
              pass
          if 'job' in kw:
              # 有job参数
              pass
          print('name:', name, 'age:', age, 'other:', kw)
          
      ## 如果要限制关键字参数的名字,就可以用命名关键字参数
      def person(name, age, *, city, job):
          print(name, age, city, job)
          
      ##和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
      
      ## 如果函数定义中已经有了一个可变参数(不定长参数),后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
      
  • 命名关键字参数

  • 默认参数:默认有值的参数

  • 不定长参数:

5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

  1. 内建函数

  2. 类访问限制https://www.liaoxuefeng.com/wiki/1016959663602400/1017496679217440

    1. 静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同,绑定的数据属于成员变量、实例变量?该变量的生命周期如何?
    2. 私有变量: 把属性的名称前加上两个下划线
    3. 在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name____score__这样的变量名。
  3. 单下划线、双下划线、头尾双下划线说明:

  • **__foo__**: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
  • _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
  • __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了
  1. os.path.sep.join([“str1”,“str2”])

    1. os.path 获取路径,sep获取路径分隔符,分隔符调用join,连接字符串数组
    2. os.path.join(os.getcwd(), ‘ui/help/html/about.htm’)
  2. decorator 装饰 [python函数修饰器(decorator)]

  3. Python 内置函数 getattr() setattr()

  4. import

    1. import 模块名1 [as 别名1], 模块名2 [as 别名2],…:使用这种语法格式的 import 语句,会导入指定模块中的所有成员(包括变量、函数、类等)。不仅如此,当需要使用模块中的成员时,需用该模块名(或别名)作为前缀,否则 Python 解释器会报错。
    2. from 模块名 import 成员名1 [as 别名1],成员名2 [as 别名2],…: 使用这种语法格式的 import 语句,只会导入模块中指定的成员,而不是全部成员。同时,当程序中使用该成员时,无需附加任何前缀,直接使用成员名(或别名)即可。

    注意,用 [] 括起来的部分,可以使用,也可以省略。

    ​ ImportError: 解决方法:

    1, 相对路径中导入,搜索路径中添加 当前路径

    ​ import sys

    ​ print(sys.path)

    2, 绝对路径导入

    ​ import_string = “import ide.ui.plugins.local_plugins.caseGenerator_template.parse_excel.caseGeneratorBase”

    ​ exec(import_string)

12, 删除文件、文件夹、非空文件夹

import os
import shutil

os.remove(path) #删除文件
os.removedirs(path) #删除空文件夹

os.rmdir(path) #删除空文件夹

shutil.rmtree(path) #递归删除文件夹,即:删除非空文件夹

13, mkdir makedir

14, os.path.join()

15, Python—执行系统命令的四种方法(os.system、os.popen、commands、subprocess)

16, 文档:https://docs.python.org/zh-cn/3/contents.html

17, classmethod https://www.cnblogs.com/baxianhua/p/10845620.html

18, 函数传参:值引用、引用、

	def testFunc(self, dict_data):
        dict_temp = dict_data
       # testFunc(dict_data) 调用结束后,dict_data 会被清空吗?

re库

1,我们曾说过Python的代码最终会被编译为字节码,然后才被解释器执行。我们特别提到用调用eval()或exec()调用一个代码对象而不是一个字符串,在性能上会有明显的提升,这是因为对前者来说,编译过程不必执行。换句话说,使用预编译代码对象要比使用字符串快,因为解释器在执行字符串形式的代码前必须先把它编译成代码对象。

这个概念也适用于正则表达式,在模式匹配之前,正则表达式模式必须先被编译成regex对象。由于正则表达式在执行过程中被多次用于比较,我们强烈建议先对它做预编译,而且,既然正则表达式的编译是必须的,那使用么预先编译来提升执行性能无疑是明智之举。re.compile()就是用来提供此功能的。

其实模块函数会对已编译对象进行缓存,所以不是所有使用相同正则表达式模式的 search()和match()都需要编译。即使这样,你仍然节省了查询缓存,和用相同的字符串反复调用函数的性能开销。在Python1.5.2版本里,缓存区可以容纳20个已编译的正则表达式对象,而在1.6版本里,由于另外添加了对Unicode的支持,编译引擎的速度变慢了一些,所以缓存区被扩展到可以容纳100个已编译的regex对象

 import re
        pattern_condition_name = '^Condition\[\w+\]'#Condition[X]
        pattern_check_name = '^Check\[\w+\]'
        
        row_start, row_end, col_start, col_end = 0, 0, 0, 0

        for row in ws.iter_rows(min_row=0, max_row=1, max_col=ws.max_column):
            for col in range(ws.max_column):
                if (row[col].value is None):
                    continue
                print(row[col].value)
                if (re.match(pattern_condition_name, row[col].value)):
                    col_start = col
                elif (re.match(pattern_check_name, row[col].value)):
                    col_end = col
                    break
                else:
                    # condition
                    continue

19, exec compile() 使用

https://wizardforcel.gitbohttps://wizardforcel.gitbooks.io/core-python-2e/content/16.htmloks.io/core-python-2e/content/16.html

20,

#!usr/bin/env python

-*- coding:utf-8-*-

21, C++ 静态方法、python 静态方法

C++:静态方法可以访问静态变量,非静态方法不能访问

OOP

1,init():实例化一个对象后,调用init方法,初始化一些实例变量

2,静态方法、类方法。

静态方法:@staticmethod

类方法:@classmethod

3, 13.12.3 hasattr()、getattr()、setattr()、delattr()

线程

threading

锁、重入锁

pytest

groovey jenkin

can

PyQT5

1, ref: https://maicss.gitbooks.io/pyqt5/content/hello_world.html

2, PyQt5学习笔记06----Qt Designer自定义信号emit及传参 信号与槽

 
class CIDEWindow(PyQt5.QtWidgets.QMainWindow):
    statusMsgSignal = PyQt5.QtCore.pyqtSignal(str) ##新建一个信号,带一个参数,字符串类型
	
	def __init__(self):
        ...
        ...
        self.statusMsgSignal.connect(self.statusMsg) ## connect视为slot,绑定槽函数 statusMsg(参数与信号的参数类型一致,参数数量与信号相比,只能少不能多)
 def statusMsg(self, msg):
        self.statusBar.showMessage(msg)
        self.updateCtrlAltFlag()
        
  def ctrlAltRelease(self, key_name):
        try:
            if key_name == 'CTRL':
                self.ctrl_alt_flag &= 1
                self.statusMsgSignal.emit('Ctrl released !')  ##释放信号,传入参数,触发槽函数
            elif key_name == 'ALT':
                self.ctrl_alt_flag &= 2
                self.statusMsgSignal.emit('Alt released !')
            else:
                pass
        except:
            import traceback
            print(traceback.print_exc())

3, clicked.connect 控件操作触发槽函数

4, pyqt5. 信号与槽 https://blog.csdn.net/jia666666/article/category/9278208

else:
pass
except:
import traceback
print(traceback.print_exc())


3, clicked.connect 控件操作触发槽函数

4, pyqt5. 信号与槽 <https://blog.csdn.net/jia666666/article/category/9278208>

1. pyqt5: <https://blog.csdn.net/jia666666/article/category/9278208>分类专栏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值