【Python】科研代码学习:一

这篇具有很好参考价值的文章主要介绍了【Python】科研代码学习:一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  • 搞科研,最重要的还是得看懂别人的源代码。
    这就意味着python不能太差
    看到比较有用的,或者不怎么看懂的代码,就搜索并学习,放在这里,供学习参考。
  • 最重要的技能:
    ∗ ∗ 在编译器中对包或者类或者方法,点击 F 12 查看源码,而不是百度问怎么获得啥啥参数 ∗ ∗ \color{red}** 在编译器中对包或者类或者方法,点击F12查看源码,而不是百度问怎么获得啥啥参数** 在编译器中对包或者类或者方法,点击F12查看源码,而不是百度问怎么获得啥啥参数
  • 可能会有错误,但都给出了程序的运行结果,可自行判断
    ∗ ∗ ( P y t h o n 3.9.18 ) ∗ ∗ \color{red}**(Python 3.9.18)** Python3.9.18

魔方方法 __dict__, __setattr__ , __getattr__ , __getattribute__

  • 类对象的属性会被放在 __dict__
class myClass():
    def __init__(self):
        print(self.__dict__)
        self.name = "Alice"
        print(self.__dict__)
        print(type(self.__dict__))
        
c = myClass()
"""
{}
{'name': 'Alice'}
<class 'dict'>
"""
  • 自然,每次设置属性和获取属性的时候,会调用对应的 __setattr____getattribute__ / __getattr__方法
    那么后面两个有什么区别吗?
    • 如果属性存在,那么只进入 __getattribute__,否则才会再进入 __getattr__
    • 注意:在 __getattribute__ 中返回 self.xxx 当然会递归报错,需要调用 object.__getattribute()
      即不能在 __getattribute__ 中写 return self__dict__[xxx]
from typing import Any


class myClass():
    def __init__(self):
        self.name = "Alice"
        
    def __setattr__(self, __name: str, __value: Any) -> None:
        print("Now set " + __name + " to " + __value)
        self.__dict__[__name] = __value
            
        
    def __getattribute__(self, __name: str) -> Any:
        print("__getattribute__ : Now get " + __name)
        return object.__getattribute__(self, __name)
    
    def __getattr__(self, __name: str) -> Any:
        print("__getattr__ : Now get " + __name)
        if __name in self.__dict__:
            return self.__dict__[__name]
        else:
            return "Not Exist"
    
    
c = myClass()
print("\n**********\n")
print(c.name)
print("\n**********\n")
print(c.name2)
"""
Now set name to Alice
__getattribute__ : Now get __dict__

**********

__getattribute__ : Now get name
Alice

**********

__getattribute__ : Now get name2
__getattr__ : Now get name2
__getattribute__ : Now get __dict__
Not Exist
"""
  • 还有一个是 __delattr__(self, __name),在删除该属性的时候调用,不赘述了。

hasattr(obj, name)

  • 判断对象是否有某个属性
    如果对象有该属性返回 True,否则返回 False
    这里不需要在类里面使用也可以

super()

  • 在 python3 中,可以直接调用 super().xxx 调用直接继承父类的方法
  • 注意把下面代码中 CB 类的 super().__init__() 注释掉之后
    CC 类调用 super().__init__() 是没法进入到 CA 类中去的,尽管 CC 类是间接继承自 CA 类。
from typing import Any


class CA():
    def __init__(self):
        print("In A")
        self.name = "Alice"
        
class CB(CA):
    def __init__(self):
        print("In B")
        super().__init__()
        self.name = "Bob"

class CC(CB):
    def __init__(self):
        print("In C")
        super().__init__()
        self.name = "Cindy"
    
A = CA()
print("\n*****************\n")
B = CB()
print("\n*****************\n")
C = CC()
print("\n*****************\n")

print(A.name)
print(B.name)
print(C.name)

"""
In A

*****************

In B
In A

*****************

In C
In B
In A

*****************

Alice
Bob
Cindy
"""
  • 如果你希望修改或者返回父类的属性,可以:
super().__setattr__(__name, __value)
super().__getattr__(__name)

注意:也可以直接 super().name 之类的,获得父类的属性。
但使用 super().__setattr__() 貌似更规范

类型注解

  • 随着项目越来越大,就越来越需要开发者对函数参数做类型的注解
    知乎:python的类型注解【type hints】
    里面很多例子都很好,建议看一看。
    注意:只是作为注解,在运行中并不会限制参数类型!(有些编译器可能会有警告,大部分没有)
    可以看到下面的例子,仍然运行成功了。
from typing import Any


def foo(x : str):
    print("TYPE : " + str(type(x)))
    print("VALUE : " + str(x))


foo({"123":456})
foo("123")
foo(123)
foo(["123"])
foo
"""
TYPE : <class 'dict'>
VALUE : {'123': 456}
TYPE : <class 'str'>
VALUE : 123
TYPE : <class 'int'>
VALUE : 123
TYPE : <class 'list'>
VALUE : ['123']
"""
  • 所有的类型注解可以查看 typing
  • 下面代码,List是来源于typing.List, 而小写的list来源是class 'list'
def foo(x : list):
	pass
	
from typing import List
def foo2(x : List):
	pass
  • 那么到底如何限定传入参数的类型呢?
    比如 module: Optional['Module'] ,那么就写:
if not isinstance(module, Module) and module is not None:
	raise TypeError(f"{torch.typename(module)} is not a Module subclass")

或者多用 assert 诊断也可以文章来源地址https://www.toymoban.com/news/detail-779603.html

解包 unpacking

  • unpacking 是一种将序列(例如元组或列表)的元素分解为单独变量的操作。这可以通过在变量前使用 * 操作符(asterisk)来实现。
a = (1,2)
b, c = a
print(b,c)


a = (1,2)
(b, c) = a
print(b,c)



a = [1,2]
(b, c) = a
print(b,c)

a = [1,2,3,4,5]
b, *c = a
print(b,c)

"""
1 2
1 2
1 2
1 [2, 3, 4, 5]
"""
  • 补充:
a,b,c = "123"
print(a,b,c)

a,b = 1,2
a,b = b,a
print(a,b)

a = 1,
print(a)

a, = [1]
print(a)

a, *b, c = [1,2,3,4,5]
print(a,b,c)


"""
1 2 3
2 1
(1,)
1
1 [2, 3, 4] 5
"""

zip() 函数

  • 可以将多个序列 ‘压缩’ 成一个 zip 对象,用迭代器访问
    迭代器的次数等于多个序列的长度最小值。
  • 序列,当然可以传入列表,元组,字典
a = [1,2,3,4]
b = ['a','b','c',6 ,7]

for x,y in zip(a,b):
    print(x,y)

print(list(zip(a,b)))

"""
1 a
2 b
3 c
4 6
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 6)]
"""
  • 也可以利用这个来构建字典
a = [1,2,3,4]
b = ['a','b','c',6 ,7]

dc = dict(zip(a,b))

for x,y in dc.items():
    print(x,y)

"""
1 a
2 b
3 c
4 6
"""

到了这里,关于【Python】科研代码学习:一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python科研数据可视化

    在过去的20 年中,随着社会产生数据的大量增加,对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身,所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”,对于数量、规模与复杂性不断增加的数据,优秀的数据可视化也变得愈加

    2024年02月11日
    浏览(42)
  • Python科研绘图--Task03

    目录 图类型 关系类型图 散点图的例子 数据分布型图 rugplot例子 分类数据型图  ​编辑回归模型分析型图 多子图网格型图 FacetGrid() 函数  PairGrid() 函数  绘图风格、颜色主题和绘图元素缩放比例 绘图风格 颜色主题  绘图元素缩放比列 图类型 关系类型图 数据集变量间的相互

    2024年02月11日
    浏览(33)
  • python实现科研通定时自动签到

    1 新建虚拟环境 2 激活环境 3 官网下载edgedriver.exe Edge WebDriver链接在此,下载对应的浏览器的版本,然后改名为 msedgedriver.exe 放在venvScripts下面。 main.py代码如下: 4 新建sign.bat文件 可激活虚拟环境和运行main.py 5 创建windows定时任务 点击此电脑----管理,即可进入此电脑下面:

    2024年02月09日
    浏览(36)
  • ChatGPT科研绘图(基于python)【chatgpt使用指南-python绘图】

    chatgpt可以通过编写Python、matlab等代码实现绘图功能。经过试验, 其中以Python最为高效准确 ,基本不会出现报错。本文以Python绘图为例进行辅助绘图,其他编程语言类似,希望对大家能有帮助。 假如你有一张数据图片,可以通过图片转Excel将数据提取出来。例如以下网址 导出

    2024年02月05日
    浏览(50)
  • Python 科研绘图可视化(后处理)Matplotlib - RGBAxes

    科研可视化是将数据和信息转化为可视化形式的过程,旨在通过图形化展示数据和信息,使得科研工作者能够更好地理解和分析数据,并从中发现新的知识和洞见。科研可视化可以应用于各种领域,如生物学、物理学、计算机科学等,帮助科研工作者更好地 理解和解释数据

    2024年02月02日
    浏览(52)
  • 快速上手MATLAB:科研、工程、数据分析,MATLAB入门(上)教你基础知识!+分享MATLAB完全学习手册资料(视频+课件+代码

    1、《MATLAB完全学习手册(视频+课件+代码)》 2、《MATLAB入门》 3、《详解MATLAB在科学计算中的应用》 4、《案例二 MATLAB与Excel交互》 5、《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》 6、《MATLAB常用函数参考 MATLAB函数汇总 精通MATLAB》 7、等等。。。。 编程语言基础:M

    2024年02月06日
    浏览(62)
  • python代码学习

    图像归一化处理: 在代码中看到图像的2种处理方式: img/255.0 image =image/ 255 img/127.5 - 1 第一种是对图像进行归一化,范围为[0, 1],第二种也是对图像进行归一化,范围为[-1, 1],这两种只是归一化范围不同。 上、下采样: scipy.ndimage.interpolation.zoom函数 scipy.ndimage.interpolation.zo

    2024年02月01日
    浏览(25)
  • Python深度学习实用代码合集

    背景:这篇文章的背景是在日常的学习和项目中,经常会遇到一些基础功能的组合复用,每次去查函数的用法和pipeline都是比较耗时耗力需要重新调试,所以想着把一些经常用到的代码段固化成函数,方便未来的调用,快速迭代和验证。另外,发现谷歌的colab比较好使,对于算

    2024年02月13日
    浏览(45)
  • 如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作

    详情点击链接:如何用GPT 运行python?GPT4科研应用与AI绘图及论文高效写作 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2 二定制自己的GPTs 1.自定义GPTs使用 2.聊天交流的方式

    2024年01月19日
    浏览(52)
  • 【机器学习实战】决策树 python代码实现

    优点:计算复杂度不高 输出结果易于理解 对中间值的缺失不敏感,可以处理不相关的特征数据 缺点:可能会产生过度匹配的问题 适用数据类型 数据型和标称型 一般流程: 收集数据 准备数据 分析数据 训练算法 测试算法 使用算法 数据重新加载的问题 代码实现 实现截图

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包