廖雪峰python学习记录

廖雪峰python实战篇的学习记录D3   D3是关于mysql的 1、import aiomysql错误 2、什么是ORM,为什么要用ORM 3、aiomysql相关的介绍 4、元类相关的介绍,type、metaclass、type.new() 先是导入import aiomysql时出现错误,ImportError: cannot import name '_scramble'。 网上查了之后说是版本问题,直接安装ai... 阅读详情

编码格式
decodeURIComponent("%E6%B8%B8%E5%AE%A2")
  //"游客"
encodeURIComponent('游客')  //
"%E6%B8%B8%E5%AE%A2"
偏函数
>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85
简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,
调用这个新函数会更简单。
注意到上面的新的int2函数,仅仅是把base参数重新设定默认值为2,但也可以在函数调用时传入其他值:


kw = { 'base': 2 }
int('10010', **kw)相当于


int2 = functools.partial(int, base=2)
int2('10010')


python 面向对象


一个小例子
class student(object):
# """docstring for ClassName"""
def __init__(self, name, score):
# super(ClassName, self).__init__()
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name,self.score) )
bart = student('Bart Simpson', 59)
lisa = student('Lisa Simpson', 87)
bart.print_score() #Bart Simpson: 59
lisa.print_score() #Lisa Simpson: 87


仍以Student类为例,在Python中,定义类是通过class关键字:
class Student(object):
    pass




私有变量(优点            因为在方法中,可以对参数做检查,避免传入无效的参数:)


如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,
就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:
class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score
    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))
改完后,对于外部代码来说,没什么变动,但是已经无法从外部访问实例变量.__name和实例变量.__score了:
>>> bart = Student('Bart Simpson', 98)
>>> bart.__name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute '__name'
你也许会问,原先那种直接通过bart.score = 59也可以修改啊,为什么要定义一个方法大费周折?因为在方法中,
可以对参数做检查,避免传入无效的参数:
class Student(object):
    ...
    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError('bad score')  #报错信息


判断一个变量是否是某个类型可以用isinstance()判断:
>>> isinstance(a, list)
True   例如 判断a是否是list 类型


继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,
也可以把父类不适合的方法覆盖重写。


判断类型 type()
>>> type(123)==type(456)
True
>>> type(123)==int
True
>>> type('abc')==type('123')
True
>>> type('abc')==str
True
>>> type('abc')==type(123)
False


判断函数用可以使用types模块中定义的常量:
>>> import types
>>> def fn():
...     pass
...
>>> type(fn)==types.FunctionType
True
>>> type(abs)==types.BuiltinFunctionType
True
>>> type(lambda x: x)==types.LambdaType
True
>>> type((x for x in range(10)))==types.GeneratorType
True


判断继承关系
对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。
我们回顾上次的例子,如果继承关系是:
object -> Animal -> Dog -> Husky
那么,isinstance()就可以告诉我们,一个对象是否是某种类型。先创建3种类型的对象:
>>> a = Animal()
>>> d = Dog()
>>> h = Husky()
然后,判断:
>>> isinstance(h, Husky)
True
没有问题,因为h变量指向的就是Husky对象。
再判断:
>>> isinstance(h, Dog)
True




****** @property ******* @score.setter 把方法当属性用


class Student(object):


    @property
    def score(self):
        return self._score


    @score.setter
    def score(self, value):
        if not isinstance(value, int):
            raise ValueError('score must be an integer!')
        if value < 0 or value > 100:
            raise ValueError('score must between 0 ~ 100!')
        self._score = value
@property的实现比较复杂,我们先考察如何使用。把一个getter方法变成属性,只需要加上@property就可以了,
此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值,于是,
我们就拥有一个可控的属性操作:
>>> s = Student()
>>> s.score = 60 # OK,实际转化为s.set_score(60)
>>> s.score # OK,实际转化为s.get_score()
60
>>> s.score = 9999
Traceback (most recent call last):
  ...

ValueError: score must between 0 ~ 100!

with open('/path/to/file', 'r') as f:
    print(f.read())     #读文件
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,
每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。
因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。




最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
并且操作系统同一时间能打开的文件数量也是有限的
Python引入了with语句来自动帮我们调用close()方法
with open('/path/to/file', 'r') as f:
    print(f.read())
写文件的时候把read改成write就行了  r改成w 。






很多时候,数据读写不一定是文件,也可以在内存中读写。
StringIO顾名思义就是在内存中读写str。
要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:
>>> from io import StringIO
>>> f = StringIO()
>>> f.write('hello')
5
>>> f.write(' ')
1
>>> f.write('world!')
6
>>> print(f.getvalue())
hello world!
Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。


>>> from io import BytesIO
>>> f = BytesIO()
>>> f.write('中文'.encode('utf-8'))
6
>>> print(f.getvalue())
b'\xe4\xb8\xad\xe6\x96\x87'
StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。




dumps()方法返回一个str,内容就是标准的JSON
用loads()或者对应的load()方法,前者把JSON的字符串反序列化
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d)
'{"age": 20, "score": 88, "name": "Bob"}'
>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'}




import json #导入python 中的json模块
l = ['iplaypython',[1,2,3], {'name':'xiaoming'}] 
#创建一个列表list l
encoded_json = json.dumps(l) 
# 将l列表,进行json格式化编码
print(repr(l))#['iplaypython', [1, 2, 3], {'name': 'xiaoming'}]
print (encoded_json) #["iplaypython", [1, 2, 3], {"name": "xiaoming"}]


线程是最小的执行单元,而进程由至少一个线程组成。
import os


print('Process (%s) start...' % os.getpid())
# Only works on Unix/Linux/Mac:
pid = os.fork()
if pid == 0:
    print('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()))
else:
    print('I (%s) just created a child process (%s).' % (os.getpid(), pid))


Process (876) start...
I (876) just created a child process (877).
Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,
返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。


子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork出很多子进程,所以,父进程要记下每个子进程的ID,
而子进程只需要调用getppid()就可以拿到父进程的ID。I am child process (877) and my parent is 87


# 子进程要执行的代码
def run_proc(name):
    print('Run child process %s (%s)...' % (name, os.getpid()))
if __name__=='__main__':
    print('Parent process %s.' % os.getpid())
    p = Process(target=run_proc, args=('test',))
    print('Child process will start.')
    p.start()
    p.join()
    print('Child process end.')
执行结果如下:
Parent process 928.
Child Process will start.
Run child process test (929)...
Child Process end.


如果没join
执行结果如下:
Parent process 10724.
Child process will start.
Child process end.
Run child process test (8736)...


创建子进程时,只需要传入一个执行函数和函数的参数,创建一个Process实例,用start()方法启动,这样创建进程比fork()还要简单。
join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步


python常用内置模块


1.datetime (datetime是Python处理日期和时间的标准库)


from datetime import datetime
now = datetime.now() # 获取当前datetime
print(now)
print(type(now))




@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)


with tag("h1"):
    print("hello")
    print("world")
上述代码执行结果为:
<h1>
hello
world
</h1>
代码的执行顺序是:
with语句首先执行yield之前的语句,因此打印出<h1>;
yield调用会执行with语句内部的所有语句,因此打印出hello和world;
最后执行yield之后的语句,打印出</h1>。
因此,@contextmanager让我们通过编写generator来简化上下文管理
 

从Peer到脉冲地震波:免费Python工具全流程配置教程(PyCharm+Anaconda) 本文详细介绍了如何使用Python工具链(PyCharm+Anaconda)实现从Peer数据库获取地震波数据到生成脉冲地震波的全流程配置。通过开源工具EQTOOL和PySeismicGen,结合Python环境搭建、数据格式转换和脉冲地震动生成技术,为结构抗震分析提供高效、灵活的解决方案。 阅读详情

相关推荐

auboi5 + d435i 使用easy handeye进行标定时,遇到相关问题记录。

解决办法:在easy_handeye默认的 calibrate.launch 文件中move group 的默认值为 "manipulator",但针对每个人的机械臂,这个值需要更改。以aubo_i5为例,需要将其改为"manipulator_i5",或者自己编写launch文件时,传入参数move group的值,便能顺利解决问题!easy_handeye_calibration_server 进程出现崩溃。

weixin_61025092的博客 958

Python面向对象,super方法,functools中的函数

1 谈谈你对面向对象的理解? 面向对象的编程—object oriented programming,简称:OOP,是一种编程的思想。OOP把对象当成一个程序的基本单元,一个对象包含了数据和操作数据的函数。面向对象的出现极大的提高了编程的效率,使其编程的重用性增高。 python面向对象的重要术语: 多态(polymorphism):一个函数有多种表现形式,调用一个方法有多种形式,但是表现出的方法...

WangJY的技术博客 308

UCD9081EVM电源时序管理:硬件配置与GUI操作全解析

电源时序管理是复杂电子系统设计的核心环节,它通过精确控制多路电源的上电/下电顺序,确保核心芯片免受浪涌电流或电压倒灌的损害。其原理基于状态机逻辑与电压监控,技术价值在于将硬连线时序转化为可编程配置,极大提升了系统可靠性与设计灵活性。在服务器、通信设备、工控系统等高可靠性应用场景中,时序控制器是实现稳定启动与故障保护的关键。本文以德州仪器UCD9081评估模块为例,深入剖析其硬件跳线配置与图形用户界面操作,涵盖I2C地址设置、电压监控分压计算、时序条件与故障响应策略等工程实践要点,帮助工程师快速掌握这一电源时

weixin_42696271的博客 303

python动态创建对象属性_python – 动态创建方法和装饰器,得到错误’functools.partial’对象没有属性’__module__’...

我目前正在使用EndpointsModel为AppEngine上的所有模型创建一个RESTful API.由于它是RESTful的,这些api有很多重复的代码,我想避免例如:class Reducer(EndpointsModel):name = ndb.StringProperty(indexed=False)@endpoints.api(name="bigdata",version="v1",...

weixin_39974409的博客 669

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 215

突破Shopee平台数据采集的风控挑战与技术解决方案

高效、稳定、合规的数据采集能力,始终是我们服务的核心价值。多类型代理组合:采用高匿名住宅代理(模拟真实用户IP)与数据中心代理(高并发需求)混合策略,结合IP轮换频率与目标国家后缀(如.com.my、.vn)动态匹配14。反反爬数据过滤:针对Shopee页面中的混淆数据(如虚假价格标签、隐藏元素),采用XPath精准定位结合正则表达式清洗,确保数据准确性89。随机化请求间隔:在爬虫代码中引入随机延迟(如1-5秒),并模拟“浏览-点击-滚动”等用户行为链,降低行为模式的可预测性48。

klj3388的博客 2982

python 动态添加装饰器_python – 动态创建方法和装饰器,得到错误...

我也偶然发现了这一点,我真的很惊讶,对我来说问题是部分对象缺少某些属性,特别是__module__和__name__默认使用functools.WRAPPER_ASSIGNMENTS来更新属性,默认为python 2.7.6中的”__module __,’_ _ _ _ _ _ _ _’,’_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ...

weixin_39976960的博客 406

冒泡排序的并行计算

本人也是并行计算的小白,在这里记录下自己的学习笔记。 今天做了一下冒泡排序的并行计算比较: 串行冒泡排序如下: #include <stdio.h> #include <stdlib.h> #include <windows.h> void BubbleSort(int * pData, int nSize) { if (!pData) { ...

gaoyi的专栏 4492

如何解决Python中“AttributeError: function object has no attribute”错误?

在Python中,如果你尝试调用一个函数,但该函数没有被定义,你可能会遇到“AttributeError: function object has no attribute”错误。

D0126_的博客 6402

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分析工作,本次主要基于对话工作流模式对Excel文件、csv文件进行解析处理,并进行成图等数据分析工作。主要用到的插件有LLM节点,文档提取器、参数提取器、自定义代码节点、echart插件等。实现解析Excel数据,经过上述不同节点的处理分析流程,最终实现数据统计图展示。

hhue2007的专栏 1万+

python调用对象属性出错:AttributeError: 'function' object has no attribute '_name_'

出错如下图所示: 原来是因为把__name__写成_name_, 下图为正确结果: 转载于:https://www.cnblogs.com/sunshine2016/p/5737073.html

647

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

廖雪峰Python学习记录

Python程序是大小写敏感的。Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。在文本编辑器中,需要设置把Tab自动转换为4个空格,确保不混用Tab和空格。 Python允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4。 转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\,Python还允许用r’ ‘表示’ ’ 内部的.

weixin_42936176的博客 272

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python学习之廖雪峰老师的习题记录20210218

python学习之廖雪峰老师的习题记录: 列表生成式: 请修改列表生成式,通过添加if语句保证列表生成式能正确地执行:

qq_43558150的博客 193

廖雪峰python学习小问题记录

1、 空函数 如果想定义一个什么事也不做的空函数,可以用pass语句: def nop(): pass pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。 2、抛出异常raise,就只是抛出而已,不做处理。 def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand

sun_fengjiao的博客 226

廖雪峰python实战篇的学习记录D2

适用于囫囵吞枣看完一遍教程,开始撸实战的人。 D2- 编写Web App骨架 用aiohttp写一个基本的app.py。完整代码如下,然后一句一句理解。。 import logging; logging.basicConfig(level=logging.INFO) import asyncio, os, json, time from datetime import datetime f...

q381907223的专栏 1282

python学习之廖雪峰老师的习题记录20210215

python学习之廖雪峰老师的习题记录: 迭代: 请使用迭代查找一个list中最小和最大值,并返回一个tuple:

qq_43558150的博客 383

廖雪峰python实战篇的学习记录D1

1.安装python3环境 因为我电脑已经安装了python2,而且使用robot做自动化测试时需要用到python2的环境,所以并不想卸载掉python2,看了网上有解决一台电脑同时安装2个版本的python的解决方法,亲测有效,详细文章链接如下:一台计算机如何安装2个版本的python,互不影响呢 2.搭建开发环境 先遇到了一个问题:pip3 install aiohttp提示“fat...

与君共勉 382

Python教程-廖雪峰的官方网站-学习记录

而如果在其他地方导入该hello模块时,if判断将失败,不会执行if条件判断之后的代码,因此,这种 if __name__=='__man__': 语句常用来测试模块中我们编写的函数的功能。python3中的str数据类型,在内存中采用Unicode编码方式,通常一个字符对应两个字节,要在网络上传输或者保存到磁盘,需要把str数据类型转换为bytes数据类型,即从Unicode编码转换为UTF-8编码。(UTF-8是兼容ASCII编码的,英文的一个字符对应一个字节,中文的一个字符对应三个字节)

weixin_42044365的博客 390

Python学习中的知识点小记录(廖雪峰)

print('''line1 line2 line3''') #输出 line1 line2 line3 如果加上r的话 里面的字符不会被转化的 print(r'''hello,\n world''') #输出 hello,\n world   python的空值是None   a = 123 # a是整数 print(a) a = 'ABC' # a变为字符串 print...

galesaur_wcy 289

开始python之路

今天开始跟着廖雪峰老师的pythonjiao'c

张飞的专栏 463

廖雪峰Python学习笔记day1

学习参考自 廖雪峰Python教程 # 廖雪峰学习python 3.x # vscode 快捷当行注释 CTRL + / 或者 CTRL + K + C # vscode 快捷取消注释 CTRL + / 或者 CTRL + K + U # vscode 快捷下方插入行 CTRL + Enter # 交互模式下('>>>')输入一行代码,执行一行 # 33 + 2 # >>> 35 # 命令行模式下,直接运行.py文件,一次性执行所有代码 # print(33.1*3)

zero_130的博客 370

Python学习笔记---------廖雪峰(基础和函数)

Python学习笔记---------廖学峰(第一章和第二章)

weixin_45126202的博客 885

廖雪峰python教程财务分析_负基础小白学习廖雪峰python教程记录(三) 高级特性...

高级特性通过python的数据类型、语句和函数,可以编写程序。构造1-99的列表,可以通过循环实现:L=[]n=1while n<=99:L.append(n)n=n+2切片>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']>>>L[0:3] (从索引0开始取,取3个元素)['Michael', 'Sa...

weixin_30391889的博客 158
上一篇: 廖雪峰python 学习日记
下一篇: python 核心模块总结
wen_binObject
博客等级 码龄10年 51粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值