函数调用

Python开发【第四章】:函数剖析

耗尽温柔 提交于 2020-02-12 10:48:52
一、Python函数剖析 1、函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def func(): #定义函数func() print("in the func") foo() #调用函数foo() func() #执行函数func() def foo(): #定义函数foo() print("in the foo") ###########打印输出########### #报错:函数foo没有定义 #NameError: name 'foo' is not defined #函数正确的调用方式 def func(): #定义函数func() print("in the func") foo() #调用函数foo() def foo(): #定义函数foo() print("in the foo") func() #执行函数func() ###########打印输出########### #in the func #in the foo 总结:被调用函数要在执行之前被定义  2、高阶函数 满足下列条件之一就可成函数为高阶函数 某一函数当做参数传入另一个函数中 函数的返回值包含一个或多个函数 刚才调用顺序中的函数稍作修改就是一个高阶函数 #高阶函数 def func():

Twisted 综述

…衆ロ難τιáo~ 提交于 2020-02-12 08:13:51
Twisted 框架概况   Twisted 是一个有着10多年历史的开源事件驱动框架。Twisted 支持很多协议,包括传输层的TCP、UDP、TLS,以及应用层的HTTP、FTP等。对所有这些协议,Twisted提供了 客户端和服务器方面的开发工具。   Twisted 是一个高性能的编程框架。在不同的操作系统平台上,Twisted 利用不同的底层技术实现了高效能通信。在 Windows 中,Twisted 的实现基于 I/O 完成端口 ( IOCP , Input/Output Completion Port ) 技术,它保证了底层高效地将 I/O 事件通知给框架及应用程序。在 Linux 中,Twisted 的实现基于 epoll 技术, epoll 是 Linux 下 多路复用 I/O 接口 select/poll 的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。   在开发技术上,Twisted 引导程序员使用 异步编程 模型。Twisted 提供了丰富的 Defer 、 Threading 等特性来支持异步编程。 在 Linux 与 macOS 中 安装 Twisted    Twisted在安装过程中需要先在设备上编译,因此在安装之前需要确保安装了Python编译开发包。该步骤在不同的操作系统略有不同,以Ubuntu Linux

Twisted网络编程必备(2)

断了今生、忘了曾经 提交于 2020-02-12 08:11:49
转自:http://www.yybug.com/read-htm-tid-15324.html 使用异步的方式工作的结果 除了反应器reactor之外, Deferred 可能是最有用的Twisted对象。你可能在Twisted程序中多次用到Deferred,所有有必要了解它是如何工作的。Deferred可能在开始的时候引起困惑,但是它的目的是简单的: 保持对非同步活动的跟踪,并且获得活动结束时的结果 。 Deferred可以按照这种方式说明:可能你在饭店中遇到过这个问题,如果你在等待自己喜欢的桌子时,在一旁哼哼小曲。带个寻呼机是个好主意,它可以让你在等待的时候不至于孤零零的站在那里而感到无聊。你可以在这段时间出去走走,到隔壁买点东西。当桌子可用时,寻呼机响了,这时你就可以回到饭店去你的位置了。 一个Deferred类似于这个寻呼机。它提供了让程序查找非同步任务完成的一种方式,而在这时还可以做其他事情。当函数返回一个Deferred对象时,说明获得结果之前还需要一定时间。为了在任务完成时获得结果,可以为Deferred指定一个事件处理器。 当编写一个 启动非同步操作的函数时,返回一个Deferred对象 。当操作完成时,调用Deferred的 callback 方法来返回值。如果操作失败,调用Deferred. errback 函数来跑出异常。例子2

Lua语言模型 与 Redis应用

走远了吗. 提交于 2020-02-12 05:48:08
参考:https://blog.csdn.net/zjf280441589/article/details/52716720 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis. 本篇博客主要介绍了 Lua 语言不一样的设计模型(相比于Java/C/C++、JS、PHP), 以及 Redis 对 Lua 的扩展, 最后结合 Lua 与 Redis 实现了一个支持过期时间的分布式锁. 我们希望这篇博客的读者朋友可以在读完这篇文字之后, 体会到 Lua 这门语言不一样的设计哲学 , 以及 更加得心应手的使用/扩展 Redis . 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int limit, int time, Jedis jedis) { boolean result = true; String key = "rate.limit:" + ip; if (jedis.exists(key)) { long afterValue = jedis.incr(key); if (afterValue > limit) { result = false; } } else { Transaction

Lua 与 Redis

江枫思渺然 提交于 2020-02-12 05:38:45
Lua 与 Redis 标签: Java与NoSQL 从 2.6版本 起, Redis 开始支持 Lua 脚本 让开发者自己扩展 Redis … 案例-实现访问频率限制: 实现访问者 $ip 在一定的时间 $time 内只能访问 $limit 次. 非脚本实现 private boolean accessLimit(String ip, int limit, int time, Jedis jedis) { boolean result = true; String key = "rate.limit:" + ip; if (jedis.exists(key)) { long afterValue = jedis.incr(key); if (afterValue > limit) { result = false; } } else { Transaction transaction = jedis.multi(); transaction.incr(key); transaction.expire(key, time); transaction.exec(); } return result; } 以上代码有两点缺陷 可能会出现竞态条件: 解决方法是用 WATCH 监控 rate.limit:$IP 的变动, 但较为麻烦; 以上代码在不使用 pipeline

C++11的多线程并发编程(四)

[亡魂溺海] 提交于 2020-02-12 04:22:28
C++11的多线程并发编程(四) —互斥量和死锁 互斥量 mutex 互斥量是一个类对象,作用是要是对要读写的数据进行加锁,通过调用lock()函数表示目前只有这个进程可以进行共享数据的操作,别的进程只有等待,当这个进程调用unlock函数的时候,表示解锁。 针对上一次案例,进行加锁和解锁操作,,lock和unlock是成双出现的,不可能你占用了一个锁,执行结束还占着,这样其他进程就无法获得锁。 # include <iostream> # include <thread> # include <list> # include <mutex> using namespace std ; class A { public : void inCommand ( ) { for ( int i = 0 ; i < 1000 ; i ++ ) { mylock . lock ( ) ; ticket . push_back ( i ) ; cout << "a command is comming" << endl ; mylock . unlock ( ) ; } } void outCommand ( ) { for ( int j = 0 ; j < 1000 ; j ++ ) { mylock . lock ( ) ; if ( ! ticket . empty ( ) ) {

Javascript闭包

扶醉桌前 提交于 2020-02-12 03:51:41
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 Js代码    var n=999;   function f1(){     alert(n);   }   f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量。 Js代码    function f1(){     var n=999;   }   alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! Js代码    function f1(){     n=999;   }   f1();   alert(n); // 999 -------------------------------------------------------------------------------------------------------- 二、如何从外部读取局部变量? 出于种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下

字符设备驱动leds

北城余情 提交于 2020-02-12 02:45:16
内核版本:4.12.9 编译器:arm-linux-gcc-4.4.3 本驱动基于jz2440 v2开发板,实现3个led设备的驱动程序。 代码如下: 1 #include <linux/module.h> 2 #include <linux/kernel.h> 3 #include <linux/fs.h> 4 #include <linux/init.h> 5 #include <linux/delay.h> 6 #include <asm/uaccess.h> 7 #include <asm/irq.h> 8 #include <asm/io.h> 9 #include <linux/cdev.h> 10 #include <linux/uaccess.h> 11 12 #define DEVICE_NAME "leds" 13 #define LED_MAJOR 231 14 15 #define LED_COUNT (4) 16 int major; 17 int minor; 18 static struct cdev led_cdev; 19 20 static struct class *leds_class; 21 static struct device *leds_class_devs[4]; 22 23 24 /* bit0<=>D10, 0:亮, 1:灭

Android中View和ViewGroup介绍

旧时模样 提交于 2020-02-12 02:33:46
1. 概念 Android 中的View与我们以前理解的“视图”不同。在 Android 中,View比视图具有更广的含义,它包含了用户交互和显示,更像Windows操作 系统 中的window。 ViewGroup是View的子类,所以它也具有View的特性,但它主要用来充当View的容器,将其中的View视作自己的孩子,对它的子View进行管理,当然它的孩子也可以是ViewGroup类型。 ViewGroup(树根)和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递。 2. Android的窗口系统 Android的窗口系统是Client/Server模式的,我在这里只讲窗口系统的客户端(图1)。 我们所提到的概念:View,ViewGroup,DecorView,ViewRoot都是存在于窗口系统的Client端。 Android中的Window是表示Top Level等顶级窗口的概念。DecorView是Window的Top-Level View,这个View可以称之为主View,DecorView会缺省的attach到Activity的主窗口中。 ViewRoot建立了主View(DecorView)与窗口系统Server端的通讯桥梁,

C++总结(二)

ε祈祈猫儿з 提交于 2020-02-12 02:31:24
一、this指针 1、概念 :类非静态成员函数的第一个隐藏的参数,该参数使用指向调用当前函数的对象 2、特性 : this指针类型:T* const 普通类型成员函数:T* const 可以修改对象的内容,可以调用普通和const类型的成员函数 const类型成员函数:const T* const:this指向不能修改并且指向对象中的内容也不能修改,只能调用const类型的成员函数 this是非静态成员函数的第一个隐藏参数,隐藏:用户在编写函数时不用给出this的参数,该参数是编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行 this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小 静态成员函数:没有this指针 this指针的传递:一般情况exc寄存器(this_call:调用约定),也可能通过参数压栈的方式进行传递:push 对象地址(比如:类中如果包含不定参数的成员函数) 3、this指针是否可以为NULL 如果成员函数是通过对象的方式进行调用,this指针一定不会为NULL: 如果成员函数是通过类类型的指针方式进行调用,this指针可能会为NULL: 4、this指针位置:栈 类的编译过程: 1、识别类名 2、识别类中的成员 3、识别类中的成员函数,并对成员函数进行改写 二、类中六个默认的成员函数 1