蔡鸟的pyhon、深度学习、视觉学习笔记 不断更正

2024-02-21 03:40

本文主要是介绍蔡鸟的pyhon、深度学习、视觉学习笔记 不断更正,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • python
    • 1、python3模块
      • 在脚本中修改sys.path来引入一些不在搜索路径中的模块
      • 使用模块的函数方法集合
    • 2、python3 函数
      • 参数传递
        • 可更改(mutable)与不可更改(immutable)对象,python中一切都是对象
        • python传不可变对象实例
        • python传可变对象实例
        • 关键字参数
        • 不定长参数
    • 3、python3数据结构
        • 列表
        • 将列表当作堆栈使用
        • 将列表当作队列使用
        • 列表推导式
        • 嵌套列表解析
        • 遍历技巧
        • 集合
          • 大佬们的文章
  • 二、深度学习:

python

1、python3模块

  • 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引用,以使用模块中的函数等功能,这同样也是使用python标准库的方法。
  • import:想使用Python源文件,只需要在另一个源文件中执行import语句,当解释器遇到import语句,如果模块在当前的搜索路径就会被导入(搜索路径是一个解释器会先进行搜索的所有目录的列表)
    eg:
 #!/usr/bin/python3#Filename:mark.pydef print_func(self)print("hello:",self)return

test.py引入mark.py模块(一个模块只会被导入一次):

#!/usr/bin/python3
#Filemile:test.py
#引入mark模块
import mark
#调用模块中的函数print_func
mark.print_func("markmark")
  • 当我们使用import时,python解释器是怎样找到对应的文件的呢????答:PYthon解释器从组成搜索路径的一系列目录名中去寻找引入的模块。
    搜索路径的查找方式:
    我的电脑

在脚本中修改sys.path来引入一些不在搜索路径中的模块

1、在解释器当前路径创建fibo.py的文件:
创建fibo.py
斐波那契(fibonacci)数列模块

  • fibonacci:从第三项开始,每一项都等于前两项之和。0 1 1 2 3 5 8 13 21 34 55 ······
def fib(n):    # 定义到 n 的斐波那契数列a, b = 0, 1while b < n:print(b, end=' ')a, b = b, a+bprint()def fib2(n): # 返回到 n 的斐波那契数列result = []a, b = 0, 1while b < n:result.append(b)a, b = b, a+breturn result

2、在python解释器里,导入fibo模块,使用fibo模块来访问fibo中的函数:
在这里插入图片描述
3、若想经常使用某个函数,可以给这个函数赋一个本地的名称:
赋本地名称

使用模块的函数方法集合

1、from···import* :把一个模块的所有内容都导入到当前的空间,但是不该被过多的使用。
2、modename.itemname : 访问模块内的函数。
3、from···import itemname,itemname : 直接把模块内(函数、变量)的名称导入到当前操作的模块。
eg:
直接使用模块的函数、变量
_name__属性:(当此属性值为main时说明是该模块自身在执行;且下划线是双下划线)一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序不执行,我们可以用_name_属性来世该程序块仅在该模块自身运行时执行。
_name_==main ; 就是说这个itemname仅在该模块自身运行的时候执行吗??别人引用这个模块的时候这个main函数不执行????

#!/usr/bin/python3
# Filename:usingname.py
#每一个模块都有一个__name__属性
if __name__==__main__:print('该模块本身在运行')
else:print('other mode')
#输出
$ python using_name.py
程序自身在运行
#输出
$ python
>>> import using_name
我来自另一模块

dir()函数:内置的dir()函数可以找到模块内定义的所有名称。以一个字符串列表的形式返回。dir函数

  • 若没有给定参数,那么dir()函数就会罗列出当前定义的所有名称。(包括函数,变量,文件)
    1
    :包是一种管理python命名空间的形式,采用“点模块名称”。比如一个模块的名称是A.B,那么他表示一个包A中的子模块B。
    eg:

sound/ 顶层包
init.py 初始化 sound 包
formats/ 文件格式转换子包
init.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py

effects/ 声音效果子包
init.py
echo.py
surround.py
reverse.py

filters/ filters 子包
init.py
equalizer.py
vocoder.py
karaoke.py

  • 目录只有含一个叫_int_.py的文件才会被认作是一个包。

用包的方法
1、每次只导入一个包里的特定模块:
注意:用这个语法,除了最后一项echo,前边的都必须是包,最后一项可以是包或者模块但是不可以是变量或函数的名字

import sound.efffcts.echo
#导入了子模块echo

以上就导致必须试用全名去访问:

sound.effects.echo.echofilter(input,output,delay=0.7,atten=4)

2、导入子模块:

#导入子模块echo
from sound.effect import echo

以上不会像1、访问时那么多字(少了一点前缀):

echo.echofilter((input,output,delay=0.7,atten=4)

3、直接导入函数或变量:

from sound.effects.echo import echofilter

以上用法相较来说又少了一些前缀

echofilter((input,output,delay=0.7,atten=4)

2、python3 函数

  • 函数的定义:函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
  • 定义一个函数
    • 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
    • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
    • 函数第一行语句可以选择性地使用文字档字符串—用于存放函数说明。
    • 函数内容以冒号起始,并且缩进
    • return[表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回None。

代码示例

def hello():print("hello world!")
def area(width,height):return width * height
def welcome(name):print("hello",name)
def printstr(str):print(str)return
def max(a,b):if a>b:return aelse:return b
w=5
h=8
welcome("mark")
welcome(888)
welcome("007")
print("width=",w,"height=",h,"area=",area(w,h))
printstr("mark mark mark hihi")
print(max(3,4))

输出结果

hello mark
hello 888
hello 007
width= 5 height= 8 area= 40
mark mark mark hihi
4

参数传递

  • 在python中,类型属于对象,变量是没有类型的。
# [1,2,3]是list类型对象
a=[1,2,3]
# mark是string类型变量
a="mark"
# a是没有类型,它仅仅是一个对象的引用(一个指针)可以指向list、string类型对象。
可更改(mutable)与不可更改(immutable)对象,python中一切都是对象

不可更改的对象:strings,tuples,numbers ,可更改的对象:list,dict

不可变类型可变类型
变量赋值a=5之后在赋值a=10,
实际上是心成城一个int值对象10,
再让a指向它,而不是改变a的值。
变量赋值L=[1,2,3,4]后再赋值L[2]=5
则是将list L的第三个元素值更改,本身L没有动,
只是其内部的一部分值被修改了。

python的函数参数传递:

不可变类型可变类型
类似c++的值传递,如整数、字符串、元组。
如fun(a),传递的只是a的值,没有影响a对象本身。
如果在fun(a)内部修改a的值,则是新生成一个a 的对象。
类似于C++的引用传递,如列表、字典。
如fun(L),则是将L真正的传递过去,
修改f后,un外部的L也会受到影响
python传不可变对象实例
a=2
# id()函数可以查看内存地址
print(id(a))
def immutable(a):print(id(a))a=10print(id(a))
immutable(a)

输出结果:在immutable函数中对象a的指向变了,一开始指向值为2,后来指向值为10

1769540315472
1769540315472
1769540315728

python传可变对象实例

可变对象在函数里修改了参数,那么原始参数也会改变。

list=[1,2,3]
def mutable(list1):
# append()在列表末尾追加元素list1.append([1,2,3])print("函数内修改后输出", list1)
mutable(list)
print("修改后函数外输出",list)

输出结果:

函数内修改后输出 [1, 2, 3, [1, 2, 3]]
修改后函数外输出 [1, 2, 3, [1, 2, 3]]

关键字参数

关键字参数在使用时不需要按照指定顺序,因为python解释器能够用参数名匹配参数值。

def keyparameter(name,age):print("我叫",name,",我",age,"岁了")return
keyparameter(age=18,name="mark")

输出结果:

我叫 mark ,我 18 岁了

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。

1、加了一个*号的参数会以元组的形式导入,存放所有未命名的变量参数

  • 元组内的变量不可以删除或修改,但可以删除整个元组 del tuple ,也可以进行拼接等。
def printtuple(arg,*xtuple):print(arg)#输出元组print(xtuple)#迭代输出元组中的变量for x in xtuple:print(x)
printtuple(10,11,12,13)

输出结果:

10
(11, 12, 13)
11
12
13

声明函数时*可以单独出现,但是其后的参数必须用关键字输入。
错误
*后关键字传入

2、加了两个星号**的参数会以字典的形式导入。

def printtuple(arg,**xdict):print(arg)#输出字典print(xdict)
printtuple(10,name="mark",age=18)
ydict={'name':'bob','age':'22'}
print(ydict)

输出结果:

10
{‘name’: ‘mark’, ‘age’: 18}
{‘name’: ‘bob’, ‘age’: ‘22’}

3、python3数据结构

列表
  • 列表可变,字符串、元组不可变。
    1
list1=[1,2,3,4]
list2=[5,6,7,8]
list1.append(4)
print(list1)
list1.extend(list2)
print(list1)
list1.insert(0,0)
print(list1)
list1.remove(4)
print(list1)
list1.pop(0)
print(list1)
list1.pop(0)
print(list1)
print(list1.index(6))
list2.insert(0,8)
print(list2)
print(list2.count(8))
list2.sort()
print(list2)
list2.reverse()
print(list2)
print(list2.copy)
list2.clear()
print(list2)

输出结果:

[1, 2, 3, 4, 4]
[1, 2, 3, 4, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
[2, 3, 4, 5, 6, 7, 8]
4
[8, 5, 6, 7, 8]
2
[5, 6, 7, 8, 8]
[8, 8, 7, 6, 5]
<built-in method copy of list object at 0x0000013DA32246C0>
[]

将列表当作堆栈使用
  • 列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用append()方法可以把一个元素添加到栈顶。用不指定索引的pop()方法可以把一个元素从堆栈顶释放出来。
>>>stack.append(6)
>>>stack
[3, 4, 5, 6]
>>>stack.pop()
6
将列表当作队列使用
  • collections是python内建的一个集合模块,里边封装了许多集合类,其中队列相关的集合只有一个:deque。
    • deque是双边队列(double-ended queue),具有队列和栈的性质,在list的基础上增加了移动、旋转和增删等。
      看这位作者写的相关语法
列表推导式
  • 通常应用程序将一些操作应用于某个序列的每个元素,用其作为结果生成新的列表的元素,或者根据判定条件创建子序列。、
    例子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
嵌套列表解析
  • range()函数的用法:
range(start,stop[,step])
#start是起始位置,stop是结束位置,step是步长
range(4) -> 0,1,2,3
matrix=[[1,2,3],[4,5,6],[7,8,9],[10,11,12],]
matrix1=[[row[i] for row in matrix] for i in range(3)]
print(matrix1)

运行过程:

外层括号是外层循环,即for i in range(3),从0,1,2循环3次,即最后产生三行。
内层括号是内层循环,当外循环i=0时,内循环row=[1,2,3],row[0]=1,row=[4,5,6],row[0]=4,···;外循环i=1时,row=[1,2,3],row[1]=2,···;···。
运行结果为:[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

在这里插入图片描述

遍历技巧

字典中遍历时,关键字和对应的值可以使用items()方法同时解读出来。

knights={'mark is':'a boy','loving':'apple'}
for q,w in knights.items():print(q,w)

输出结果:

mark is a boy
loving apple
在序列中遍历时,索引位置和对应值可以使用enumerate()函数同时得到:

knights=['mark','is','a','boy','loving','apple']
for q,w in enumerate(knights):print(q,w)

输出结果:

0 mark
1 is
2 a
3 boy
4 loving
5 apple
同时遍历两个或者更多的序列,可以使用zip组合 (zip()···**.format())

gender=['boy','girl']
fruit=['apple','orange']
for q,w in zip(gender,fruit):print('mark is a {0},loving {1}'.format(q,w))

输出结果:
mark is a boy,loving apple
mark is a girl,loving orange
要反向遍历一个序列,首先指定这个序列,然后调用reversed()函数。

gender=['boy','girl']
for i in reversed(gender):print(i)

输出结果:
girl
boy

集合

集合是一个无序不重复的元素的集。基本功能包括关系测试和消除重复元素。
可以用({})创建集合。注意:如果要创建一个空集合,必须要用set()而不是{};后者创建一个空的字典。

basket={'12213','13123','1231321'}
a=set('123xdfwefw')
# set expected at most 1 argument
大佬们的文章

import as
import from
import os
import shutil
import

PIL详解
PIL各模块详解
class类入门
self解释
self.name=name

二、深度学习:

深度学习,不断更正:

这篇关于蔡鸟的pyhon、深度学习、视觉学习笔记 不断更正的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730471

相关文章

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程