函数调用

Python_面试宝典_高级

两盒软妹~` 提交于 2020-02-16 14:18:40
python中的类方法、类实例方法、静态方法有什么区别? 类方法:是类对象的方法,在定义时需要在上方使用“@classmethod”进行装饰,形参为 cls 表示类对象,类对象和实例对象都可调用。 类实例方法:是类实例化对象的方法,只有实例对象可以调用,形参为 self ,指代对象本身 静态方法:是一个任意函数,在其上方使用“@staticmethod”进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系。 python函数调用的时候参数的传递方式是值传递还是引用传递? python的参数传递有:位置参数、默认参数、可变参数、关键字参数 函数的传值到底是值传递还是引用传递,要分情况: 不可变参数值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象。 可变参数是引用传递的: 比如像列表,字典这样的对象是通过引用传递的、和c语言里面的指针传递数组很类似,可变对象能在函数内部改变。 对缺省参数的理解? 缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会代替默认参数。 *args 是不定长参数,它可以表述输入参数的不确定的,可以是任意多个 **kwargs 是关键字参数,赋值的时候是以 = 值的方式,参数是可以任意多对在定义函数的时候不确定会有多少参数会传入,就可以使用两个参数

JavaScript 异步处理(ES6)

感情迁移 提交于 2020-02-16 12:58:45
一、Promise 是什么? 不是讲 async/await 吗?为什么会提到 Promise ? 实际上, async/await 是 Promise 的一个拓展,所以,想要更好地理解 async/await ,需要先理解 Promise 。 我们先看看 Promise 是什么。先在浏览器中使用 console.dir(Promise) 打印出 Promise 对象的所的属性和方法: 从打印结果可以看出, Promise 是一个构造函数,它自己本身有 all 、 reject 、 resolve 等方法,原型上有 catch 、 finally 、 then 等方法。所以 new 出来的 Promise 对象也就自然拥有 catch 、 finally 、 then 这些方法。从上图中可以看到, then 方法返回的是一个新的 Promise 实例(注意,不是原来那个 Promise 实例)。因此可以采用链式写法,即 then 方法后面再调用另一个 then 方法。 Promise 的中文意思是承诺,这种**“承诺将来会执行”**的对象在 JavaScript 中称为 Promise 对象。简单说就是一个容器,里面保存着某个未来才会执行的事件(通常是一个异步操作)的结果。 Promise 对象有两个特点: 对象的状态不受外界影响。 Promise 对象代表一个异步操作,有三种状态

Zepto核心模块源代码分析

若如初见. 提交于 2020-02-16 10:10:21
一、Zepto核心模块架构 Zepto核心模块架构图 该图展示了Zepto核心模块架构代码的组织方式。主要分为私有变量、函数和暴露给用户的所有api。 Zepto核心模块架构代码 该图展示了Zepto的核心模块架构代码,忽略了所有实现的细节。 var Zepto = (function() { // 私有变量($和zepto不是私有变量,它们会被暴露出去) var undefined, emptyArray = [], filter = emptyArray.filter, slice = emptyArray.slice, $, zepto = {}; // 私有函数 function likeArray() {} // Z类 function Z() {} // 构建Z对象的主要函数 zepto.matches = function() {}; zepto.fragment = function() {}; zepto.Z = function() { return new Z(dom, selector) }; zepto.isZ = function() { return object instanceof zepto.Z }; zepto.init = function() {}; zepto.qsa = function() {}; // Z对象的共享方法 $.fn =

Linux Device Driver 3rd 下

做~自己de王妃 提交于 2020-02-16 09:34:54
第十一章 内核的数据类型 坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷 内核使用的数据类型主要分为三大类: ① 标准C语言类型,类似int ② 类似u32这样有确定大小的类型 ③ 类似pid_t这样用于特定内核对象的类型 使用标准C语言类型 在不同的体系架构上,普通C语言的数据类型所占空间的大小并不相同。 Linux系统中,指针和long整型的大小总是相同的。 为数据项分配确定的空间大小 有时内核代码需要特定大小的数据项,多半是用来匹配预定义的二进制结构或者和用户口空间进行通讯或者通过在结构体中插入"填白 padding"字段 来对齐数据。 当需要知道自己的数据大小时,内核提供了下列数据类型,定义在<asm/types.h>中 ① u8; 无符号字节8位 ② u16; 无符号字 16位 ③ u32; 无符号32位 ④ u64; 无符号64位 相应的有符号类型也存在,只需将名字中的u用s替换就可以了。 接口特定的类型 内核中最常用的数据类型由typedef声明,这样可以防止出现任何移植性问题。 当需要打印一些接口特定的数据类型时,最行之有效的方法就是将其强制转换成可能的最大类型(通常是long或者unsigned long),然后用相应格式。 因为格式和类型相匹配,而且也不会丢失数据位

Python—初识面向对象

旧街凉风 提交于 2020-02-16 04:40:21
楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 def person(name,age,sex,job): data = { 'name':name, 'age':age, 'sex':sex, 'job':job } return data def dog(name,dog_type): data = { 'name':name, 'type':dog_type } return data 上面两个方法相当于造了两个模子,游戏里的每个人和每条狗都拥有相同里的属性。游戏开始,你根据一个人或一只狗传入的具体信息来塑造一个具体的人或者狗,怎么生成呢? d1 = dog("李磊","京巴") p1 = person("严帅",36,"F","运维") p2 = person("egon",27,"F","Teacher") 两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对? 怎么实现呢,。。想到了, 可以每个功能再写一个函数,想执行哪个功能,直接 调用 就可以了,对不? def bark(d): print("dog

Go语言并发编程总结

你。 提交于 2020-02-16 03:47:23
Golang :不要通过共享内存来通信,而应该通过通信来共享内存。 这句风靡在Go社区的话,说的就是 goroutine中的 channel ....... 他在go并发编程中充当着 类型安全的管道作用。 1、通过golang中的 goroutine 与sync.Mutex进行 并发同步 import( "fmt" "sync" "runtime" ) var count int =0; func counter(lock * sync.Mutex){ lock.Lock() count++ fmt.Println(count) lock.Unlock() } func main(){ lock:=&sync.Mutex{} for i:=0;i<10;i++{ //传递指针是为了防止 函数内的锁和 调用锁不一致 go counter(lock) } for{ lock.Lock() c:=count lock.Unlock() ///把时间片给别的goroutine 未来某个时刻执行该routine runtime.Gosched() if c>=10{ fmt.Println("goroutine end") break } } } 2、goroutine之间通过 channel进行通信,channel是和类型相关的 能够理解为 是一种类型安全的管道。 简单的channel

CrackMe001

删除回忆录丶 提交于 2020-02-16 03:26:25
https://www.52pojie.cn/thread-709699-1-1.html 将上面链接中的 160个CrackMe的打包文件 下载下来之后, 打开该 chm , 选择第一个 Acid burn , 下载保存到本地, 然后解压, 运行其中的 exe 程序 0x00 查壳 壳是啥? 为啥要查壳脱壳? 不懂, 先跳过! 程序是使用 delphi 编写的 无壳 0x01 分析程序 首先了解下这个软件运行时的情况,记录下有哪几个需要破解的位置。 程序运行时会弹出一个 NAG窗口 , 标题是 hello you have to kill me ,这个窗口是要去除的 NAG窗口 : 软件未注册或软件的试用版经常会弹出一些提示窗口要求注册,这些窗口被称为 nag窗口 然后点击 确定 后进入程序的主窗口 进去后发现有两个按钮, 根据按钮上的字符串判断应该是需要输入序列号和名称的位置。 首先看下左边那个按钮,点击进去看下情况,发现有两个输入框,分别是输入用户名和序列号,然后点击 Check it Baby ,程序会进行校验,校验失败会弹出下面窗口,提醒你 Try Again!! 可以发现上面这个位置是一个需要破解的点。 然后点击 I give up 按钮返回到程序的主界面,看下右边那个按钮的情况。 点击进去后发现有一个输入框,提醒你输入序列号,然后点击 Check it Baby

深度解密Go语言之context

一个人想着一个人 提交于 2020-02-16 03:23:16
目录 什么是 context 为什么有 context context 底层实现原理 整体概览 接口 Context canceler 结构体 emptyCtx cancelCtx timerCtx valueCtx 如何使用 context 传递共享的数据 取消 goroutine 防止 goroutine 泄漏 context 真的这么好吗 总结 参考资料 Go 语言的 context 包短小精悍,非常适合新手学习。不论是它的源码还是实际使用,都值得投入时间去学习。 这篇文章依然想尝试全面、深入地去研究。文章相比往期而言,整体不长,希望你看完可以有所收获! 什么是 context Go 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含 goroutine 的运行状态、环境、现场等信息。 context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。 随着 context 包的引入,标准库中很多接口因此加上了 context 参数,例如 database/sql 包。context 几乎成为了并发控制和超时控制的标准做法。 context.Context 类型的值可以协调多个 groutine 中的代码执行“取消”操作,并且可以存储键值对。最重要的是它是并发安全的。

栈与递归

谁说我不能喝 提交于 2020-02-16 00:06:38
文章目录 递归 函数调用 递归工作栈 递归算法的效率分析 递归转换为非递归 递归算法优点 递归 若在一个函数、过程或数据结构定义的内部又直接(或间接)出现定义本身的应用,则称它们是递归。 三种常使用递归的情况: 定义是递归的 例1:阶乘函数 long Fact ( long n ) { if ( n == 0 ) return 1 ; //递归终止的条件 else return n * Fact ( n - 1 ) ; //递归步骤 } 例2:Fibonacci数列 long Fib ( long n ) { if ( n == 1 || n == 2 ) return 1 ; //递归终止的条件 else return Fib ( n - 1 ) + Fib ( n - 2 ) ; //递归步骤 } 分解-求解的策略称为 分治法 采用分治法进行递归求解问题需要满足的条件: (1)能将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同,不同的仅是处理的对象,并且这些处理对象更小且变化有规律 (2)可以通过上述转化而使问题简化 (3)必须有一个明确的递归出口,或称递归的边界 分治法: void p ( 参数表 ) { if ( 递归结束条件成立 ) 可直接求解; //递归终止条件 else p ( 较小的参数 ) ; //递归步骤 } 数据结构是递归的

Python—函数进阶

戏子无情 提交于 2020-02-15 23:53:41
楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print(bigger) 之前是不是我告诉你们要把结果return回来你们就照做了?可是你们有没有想过,我们为什么要把结果返回?如果我们不返回m,直接在程序中打印,行不行? 来看结果: >>> def my_max(x,y): ... m = x if x>y else y ... >>> my_max(10,20) >>> print(m) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'm' is not defined 报错了!错误是“name 'm' is not defined”。变量m没有被定义。。。为啥?我明明定义了呀! 在这里我们首先回忆一下python代码运行的时候遇到函数是怎么做的。 从python解释器开始执行之后,就在内存中开辟了一个空间 每当遇到一个变量的时候,就把变量名和值之间的对应关系记录下来。 但是 当遇到函数定义的时候解释器只是象征性的将函数名读入内存 ,表示知道这个函数的存在了,至于函数内部的变量和逻辑解释器根本不关心。