python学习笔记(3)

PC游戏下载后运行库报错怎么办?DirectX与VC++修复指南 DirectX与Visual C++运行库是Windows系统运行PC游戏的基础组件,负责图形渲染、音频处理及程序依赖。当运行库缺失或版本不匹配时,游戏启动常出现dll报错、黑屏闪退等问题。掌握运行库修复技术,能有效解决DirectX 12不支持、VC++ 2013安装失败等高频故障,提升游戏部署效率。该能力广泛应用于PC游戏下载后的环境配置、系统重装后的组件补全等场景。本文围绕koyso游戏中文官网的访问与使用,详解从下载到运行的完整排查流程,帮助用户快速定位并修复运行库问题。 阅读详情
43、函数

(1)若函数没有返回值,则默认的返回值是None

(2)装饰器

装饰器实际就是函数,它接受函数对象。我们在执行函数之前,可以运行些预备代码,也可以在执行代码之后做些清理工作。这类似于java中的AOP,即面向切面编程,可以考虑在装饰器中置入通用功能的代码来降低程序复杂度。例如,可以用装饰器来:引入日志、增加计时逻辑来检测性能、给函数加入事务的能力

1. 无参装饰器:
@deco2
@deco1
def func(arg1, arg2, ...): 
    pass

这和创建一个组合函数是等价的:

def func(arg1, arg2, ...):
    pass
func = deco2(deco1(func))

2. 有参装饰器:
@deco1(deco_arg)
@deco2
def func():
    pass

这等价于:

func = deco1(deco_arg)(deco2(func))

示例:
from time import ctime,sleep

def tsfunc(func):
    def wrappedFunc():
        print '[%s] %s() called' % (ctime(), func.__name__)
        return func()
    return wrappedFunc

@tsfunc
def foo():
    print 'foo() is invoked !'

foo()
sleep(4)

for i in range(2):
    sleep(1)
    foo()

运行结果:
[Tue Jul 17 22:45:54 2012] foo() called
foo() is invoked !
[Tue Jul 17 22:45:59 2012] foo() called
foo() is invoked !
[Tue Jul 17 22:46:00 2012] foo() called
foo() is invoked !


(3)传递函数
函数也是phthon对象的一种,也是一个对象,也可以将函数对象的引用赋值给一个变量,通过这个变量,也相当于是这个函数的别名,来调用这个函数,基于这种机制,就有了传递函数,即可以将一个函数名通过形参传递给另外一个函数,在这个函数中调用传递进来的函数。如下示例:

>>> def foo():
	print 'in foo()'

>>> bar=foo
>>> bar()
in foo()

>>> def bar(argfunc):
	argfunc()
	
>>> bar(foo)
in foo()
>>> 

(4)可变长度的参数
于函数调用提供了关键字以及非关键字两种参数类型,python 用两种方法来支持变长参数,在函数调用中使用*和**符号来指定元组和字典的元素作为非关键字以及关键字参数的方法。

1. 非关键字可变长参数(元组)
可变长的参数元组必须在位置和默认参数之后,带元组(或者非关键字可变长参数)的函数普遍的语法如下:
def function_name([formal_args,] *vargs_tuple):pass

星号操作符之后的形参将作为元组传递给函数,元组保存了所有传递给函数的"额外"的参数(匹
配了所有位置和具名参数后剩余的)。如果没有给出额外的参数,元组为空。

之前,只要在函数调用时给出不正确的函数参数数目,就会产生一个TypeError异常。通过末尾增加一个可变的参数列表变量,我们就能处理当超出数目的参数被传入函数的情形,因为所有的额外(非关键字)参数会被添加到变量参数元组。

示例:
>>> def tupleVarArgs(arg1,arg2='defaultB',*rest):
	print 'formal arg1: ',arg1
	print 'formal arg2: ',arg2
	for eachXarg in rest:
	    print 'another arg: ',eachXarg

>>> tupleVarArgs('abc')
formal arg1:  abc
formal arg2:  defaultB

>>> tupleVarArgs('abc',25.0)
formal arg1:  abc
formal arg2:  25.0

>>> tupleVarArgs('abc',25.0,'suo','piao',999999L)
formal arg1:  abc
formal arg2:  25.0
another arg:  suo
another arg:  piao
another arg:  999999


精要:多余的参数保存到一个元组中,传递给函数

2.关键字变量参数(Dictionary)
语法:def function_name([formal_args,][*vargst,] **vargsd):pass

示例:
>>> def dicVarArgs(arg1,arg2='defaultB',**rest):
	print 'formal arg1: ',arg1
	print 'formal arg2: ',arg2
	for key in rest:
	    print 'xtra arg %s: %s ' % (key,rest[key])

	    
>>> dicVarArgs('abc')
formal arg1:  abc
formal arg2:  defaultB

>>> dicVarArgs('abc',123)
formal arg1:  abc
formal arg2:  123

>>> dicVarArgs('abc',123,c='suo',d=456,e=9999L)
formal arg1:  abc
formal arg2:  123
xtra arg c: suo 
xtra arg e: 9999 
xtra arg d: 456 
>>> 


精要:多余的关键字参数,将其放到字典中,传递给函数

关键字和非关键字可变长参数都有可能用在同一个函数中,只要关键字字典是最后一个参数并且非关键字元组先于它之前出现,如下示例:

>>> def varArgs(arg1,arg2='defaultB',*tupleRest,**dicRest):
	print 'formal arg1: ',arg1
	print 'formal arg2: ',arg2
	for each in tupleRest:
		print 'non-key arg: ',each
	for key in dicRest:
	    print 'xtra arg %s: %s ' % (key,dicRest[key])

>>> varArgs('abc')
formal arg1:  abc
formal arg2:  defaultB

>>> varArgs('abc',123)
formal arg1:  abc
formal arg2:  123

>>> varArgs('abc',123,'suo',456,c='piao',d='love',e=9999)
formal arg1:  abc
formal arg2:  123
non-key arg:  suo
non-key arg:  456
xtra arg c: piao 
xtra arg e: 9999 
xtra arg d: love 

其实,也可以这样来调用带有可变长参数的函数:
>>> mytuple=('suo','love','piao',9999)
>>> mydic={'c':'how','d':'are','e':'you','f':88888L}
>>> varArgs('abc',123,*mytuple,**mydic)
formal arg1:  abc
formal arg2:  123
non-key arg:  suo
non-key arg:  love
non-key arg:  piao
non-key arg:  9999
xtra arg c: how 
xtra arg e: you 
xtra arg d: are 
xtra arg f: 88888 
>>> 
这样的调用,更加清晰一些。

(5)函数式编程
1. lambda 匿名函数
python 允许用lambda 关键字创造匿名函数,语法为:
lambda [arg1[, arg2, ... argN]]: expression

lambda必须放在一行中,就像是单行版的函数一样,但应该叫它lambda表达式

它返回一个函数对象,这个函数执行的操作,就是expression中的内容

示例:
>>> a=lambda x,y=2:x+y
>>> a(4)
6
>>> b=lambda *z : z
>>> b(1,2,3)
(1, 2, 3)

虽然看起来lambdda 是一个函数的单行版本,但是它不等同于c++的内联语句,这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。lambda 表达式运作起来就像一个函数,当被调用时,创建一个框架对象。


2.内建函数
apply(func[, nkw][, kw]):
用可选的参数来调用func,nkw 为非关键字参数,kw 关键字参数;返回值是函数调用的返回值。

filter(func, seq):
调用一个布尔函数func 来迭代遍历每个seq 中的元素; 返回一个使func 返回值为ture 的元素的序列

map(func, seq1[,seq2...]):
将函数func 作用于给定序列(s)的每个元素,并用一个列表来提供返回值;如果func 为None, func 表现为一个身份函数,返回一个含有每个序列中元素集合的n 个元组的列表。

reduce(func, seq[, init]):
将二元函数作用于seq 序列的元素,每次携带一对(先前的结果以及下一个序列元素),连续的将现有的结果和下雨给值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值;如果初始值init 给定,第一个比较会是init 和第一个序列元素而不是序列的头两个元素。


(6)变量作用域
当搜索一个标识符的时候,python 先从局部作用域开始搜索。如果在局部作用域内没有找到那
个名字,那么就一定会在全局域找到这个变量否则就会被抛出NameError 异常。

问题引出:
在函数中定义了一个局部的bar变量,在主函数体中,定义了一个全局的bar变量,但是有可能在函数体内的bar变量会覆盖掉全局的bar变量,这样全局的bar变量在函数体内就失效了。。

如下示例:
bar=100

def foo():
    print 'calling foo()...'
    bar=200
    print 'in foo(), bar is ', bar


print 'bar=',bar
foo()
print 'bar=',bar

运行结果如下:
bar= 100
calling foo()...
in foo(), bar is  200
bar= 100

问题解决:
为了解决上面的问题,我们可以使用global关键字,明确的引用一个已命名的全局变量

bar=100

def foo():
    print 'calling foo()...'
    global bar
    bar=200
    print 'in foo(), bar is ', bar


print 'bar=',bar
foo()
print 'bar=',bar

运行结果如下:
bar= 100
calling foo()...
in foo(), bar is  200
bar= 200


(7)递归
求阶乘:

>>> def factorial(n):
	if n==0 or n==1:
		return 1
	else:
		return (n*factorial(n-1))

	
>>> factorial(5)
120


(8)生成器,暂时跳过

Python 学习之《Learn Python3 The Hard Way 》第四部分学习笔记 文章目录Python 学习之《Learn Python3 The Hard Way 》第四部分学习笔记1、定义函数2、定义一个有返回值的函数3、认识编码4、逻辑符常规表 Python 学习之《Learn Python3 The Hard Way 》第四部分学习笔记 1、定义函数 def d(): print('没有参数') def e(arg): print(f'有一个参数 {arg}') def f(arg1, arg2): print(f'有两个参数 {arg1},{a 阅读详情

相关推荐

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2423

Python测试题——学习通(高校邦)

B. 代码编写中,缩进可以用Tab键实现,也可以用多个空格实现,但两者不混用。A. 缩进指每一行代码开始前的空白区域,用来表示代码之间的包含和层次关系。d ={“大海”:“蓝色”, “天空”:“灰色”, “大地”:“黑色”}√ C. “缩进”有利于程序代码的可读性,并不影响程序结构。D. Python语言出现的晚,具有其他高级语言的一切优点。print(d[“大地”], d.get(“大地”, “黄色”))A. Python3.x和Python2.x兼容。D. 不需要缩进的代码顶行编写,不留空白。

m0_55879104的博客 1万+

粒子滤波在基于误差状态量的INS/GNSS组合导航中的使用技巧-On Particle Filter based Error-State INS/GNSS Intergrated Navigation

本文面向以15维惯导(INS)误差为状态量,3维位置误差为量测量的INS/GNSS组合导航系统,​在西工大严恭敏老师的开源工具箱中PF相关库函数基础上实现基于粒子滤波(PF)的惯导误差状态量的递推估计,设计了粒子重置环节并强调了其在本特定场景下的重要性。

I33D33I的博客 1742

Python中的is和==以及字符串驻留机制

is 和 ==   先了解下官方文档中关于 is 和 == 的概念。is 表示的是对象标示符(object identity),而 == 表示的是相等(equality);is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样(相当于检查 id(a) == id(b)),而 ==...

weixin_34184561的博客 301

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

pytorch超详细安装教程,Anaconda、PyTorch和PyCharm整套安装流程

本文介绍基于Anaconda环境以及与PyCharm结合,安装PyTorch深度学习框架。

Bluebro的博客 19万+

Python学习(四)—— 数据类型方法解析及类型转换

一、 int类型:   1.bit_length   原型:def bit_length(self):   功能:返回int型所占字节数  示例: a = 124 print(bin(a)) print(a.bit_length())    结果: 0b1111100 7 二、str类型   1.capitalize   原型:def capi...

asd7155006的博客 527

PADS VX 蛇形走线的设置方法与绕制

在PCB设计过程中,在等长的设置中是必须用到蛇形走线的,并且DDR模块也会经常使用到。因此掌握蛇形走线的设置方法对我们PCB高速板设计中有很大的帮助。下面介绍蛇形走线的设置方法与绕制。1.单根网络线的蛇形走线的设置:打开PADS router界面,点击“工具”→“选项”(快捷方式“Ctrl+Enter”),弹出“选项”窗口,选择“布线”界面下的“调整”,在“调整”界面,设置蛇形走线,倒角比例可以灵活设置。操作如下图所示:完成蛇形走线的配置后,快捷方式“F3”进行交互式布线时,单击右键选择“添加蛇形走线”,便

tianpu2320959696的博客 3390

ES6

https://es6.ruanyifeng.com/ let 1.作用: *与var类似,用于声明一个变量 2.特点: *在块作用域内有效 *不能重复声明 *不会预处理,不存在变量提升 之前用var时有预处理。还记得undefined吗 3.应用: *循环遍历加监听 *使用let取代var是趋势 例子:点击按钮,正确显示...

猪窝 520

从后端角度浅谈抗辐射设计----三模冗余(TMR)

三模冗余设计(TMR),是最常用的一种容错技术,三个模块采取相同的操作,以多数相同的输出作为表决系统的正确输出,即3取2,因为三个模块是相互独立的,而其中两个模块同时出错的概率是极小的,因此便可保证系统输出的可信度。然而这个设计也会存在面积浪费,功耗的增加,而且由于是冗余的设计,在后续进行综合或者pr的时候会被工具优化,因此需要对模块进行don’t touch设置;通过增值表得到,逻辑关系表达式为:Q=(Q1&Q2)|(Q1&Q3)|(Q2&Q3),通过工艺库的stdcell进行搭建,得到如下电路。

芯冰乐 327

5G无线关键技术 — 新型传输波形技术和先进编码与调制技术

目录 1、OFDM传输波形技术 2、滤波器组多载波 (Filterbank multicarrier:FBMC) 3、先进编码与调制技术 4、空间调制(Spatial Modulation SM) 5、频率正交幅度调制 1、OFDM传输波形技术 OFDM是当前Wi-Fi和LTE标准中的高速无线通信的主要传信模式。 LTECP配置 子载波间隔 CP长度Tcp 有用符号长度Tu CP比例..

Fanjufei的博客 2128

python高级部分之装饰器详解

python中的装饰器是一个非常重要的知识点,那在介绍装饰器之前大家先要了解闭包的概念,这样方便大家后面理解装饰器是什么? 那么先来介绍闭包的概念吧 一、什么是闭包 1.什么是闭包 • 在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生 闭包。 • 闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。 • 在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。 2.形成闭包的条件 • 必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套 • 内嵌函数

shauigu_niupi的博客 684

麻辣香锅病毒分析

Spicy Hot Pot浏览器劫持病毒(麻辣香锅病毒)从2020年初被安全公司监测到,因其病毒模块带有MLXG_KM被安全行业代称麻辣香锅病毒。目前通过各种激活工具传播, 包括暴风激活、小马激活和KMS激活等诸多工具,疑似与下载站进行合作推广此类激活工具。Spicy Hot Pot 是一个浏览器劫持 Rootkit,它会将用户的主页更改为指向恶意软件操作员控制的页面,此外还会将内存转储从机器上传到预定义的服务器,并结合本地更新功能以确保其保持更新。通常浏览器劫持者会通过更改用户主页的恶意可执行文件或注册表

不忘初心,护天下安全! 4788

Python3 学习笔记

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

qq_43668996的博客 1086

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python3基础学习笔记资源下载

Python3基础学习笔记资源下载 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到本仓库!这里提供了《Python3基础学习笔记.pdf》资源文件的下载。 简介 《Python3基础学习笔记.pdf》是一个专为Python初学者准备的宝贵学习资料。本笔记详细介绍了Python 3.4的基本语法和高级特性,内容系统全面,旨在帮助读者快速掌握Python编程的基础知识。 内...

gitblog_06706的博客 345

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...

Python3 学习笔记,终于出书了(送10本)

前段时间咱们公众号拉了个读书群,我定规则是入群必须选择一本书阅读,组队打卡对抗懒惰。还有一条规定是必须每天坚持做学习笔记,同时还需要同步到博客上。然后有位同学觉得很困惑,...

Python之禅的专栏 219

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

学习笔记之Python 3

学习笔记之Python 3 教程 https://www.cnblogs.com/pegasus923/p/7624416.html 学习笔记之X分钟速成Python3 https://www.cnblogs.com/pegasus923/p/10690086.html Python 3 入门 https://mp.weixin.qq.com/s/l-zGBOrRC...

weixin_33935777的博客 110

python3学习笔记

PYTHON3学习笔记(一) 1.输入和输出 输出 用print()在括号中加上字符串,就可以向屏幕输出指定的文字。比如输出’hello ,world’,用代码实现如下: print("hello,word") print()函数也可以接受多个字符串,用逗号隔开,就可以连成一串输出: print('The boy name ','is','xiaoming') The boy name is xi...

weixin_43914060的博客 223

笨办法学Python 3 ex35学习笔记

#笨办法学Python 3 ex39 from sys import exit def gold_room(): #print("This room is full of gold. How much do you take?") print("这个房间装满了金子。你要多少钱?") choice = input(">") if "0" in choice or "1" in choice: how_much = int(choice) else: #dead("Man, le

weixin_40946769的博客 560

Python3基础学习笔记资源获取:为零基础学习Python提供完美起点

Python3基础学习笔记资源获取:为零基础学习Python提供完美起点 去发现同类优质开源项目:https://gitcode.com/ Python作为一种流行的编程语言,其易学易用的特性吸引了许多初学者。今天,我们要为大家推荐一个开源项目——《Python3基础学习笔记资源获取》,它为Python初学者提供了一个宝贵的学习资源。以下是对这个项目的详细介绍。 项目介绍 《Python3基础学习...

gitblog_06701的博客 379

Python3学习笔记

语法def 函数名(参数列表) : 函数体Flask 是一个用 Python 编写的轻量级 Web 应用框架。Flask 基于 WSGI(Web Server Gateway Interface)和 Jinja2 模板引擎,旨在帮助开发者快速、简便地创建 Web 应用。Flask 被称为"微框架",因为它使用简单的核心,用扩展增加其他功能。参考headers 参数用于设置 HTTP 请求头。通过自定义请求头,我们可以传递一些额外的元数据,例如 Content-Type。

弱水三千的博客 748

Python3学习笔记&开发记录

感谢廖雪峰大神 首先要感谢廖雪峰大神的无私付出.Python3学习笔记是学习廖大神的Python教程时写的.有不少内容是直接拷贝的,写这些笔记的目的只是想做一个记录,以便忘记的时候查看(要是再去查看廖大神的教程就会很浪费时间了,廖大神的教程是很适合初学者的).下面附上廖雪峰大神Python教程链接.[http://www.liaoxuefeng.com/wiki/0014316089557264

outer199 724

Python3学习笔记——列表

【代码】Python3学习笔记——列表。

IT913913的博客 173

Python3 学习笔记1-基础语法

Python3 学习笔记1-基础语法

The_xz的博客 1549
上一篇: python学习笔记(2)
下一篇: python学习笔记(4)
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值