在Python中,函数是一等对象,而一等对象的定义是满足下述条件的程序实体:
- 在运行时创建
- 能赋值给变量或数据结构中的元素
- 能作为参数传递给函数
- 能作为函数的返回结果
我们通过下面的例子来证明python中的函数是对象:
>>> def factorial(n):
... '''return n!'''
... return 1 if n < 2 else n * factorial(n-1)
...
>>> factorial(41)
3345252...
分类目录归档:猿来如此
Python中的字典和集合
Python标准库中的所有映射类型都是使用dict来实现的,因此他们都有一个共同的限制,即只有可散列的数据类型才可以作为映射的键,那么什么是可散列的数据类型呢?下面介绍下: 在python词汇表中,关于可散列类型的定义有这么一段话:
如果一个对象是可散列的,那么在这个对象的生命周期中,他的可散列值是不变的,而且这个对象需要实现__hash__()方法。另外可散列对象还要有__eq__()方法,这样才可以和别的键做比较,如果两个可散列对象的值是相等的,那么他们的散列值一定是相等的。
原子不可变数据类型(str,bytes和数值类型)都是可散列类型,frozenset也是可散列的,因为根...
Python中的序列
内置序列类型概述: Python标准库使用C实现了丰富的序列类型,列举如下:
容器序列 list,tuple和collsctions.deque这些序列能存放不同的数据类型。 扁平序列 str,bytes,bytearray,memoryview和array.array,这些序列只能存放一种类型。
容器序列存放的是他们所包含的任意类型的对象引用,而扁平序列存放的是值而不是引用,也就是说,扁平序列其实是一段连续的内存空间,因此扁平序列其实更加紧凑,但是他们里面只能存放例如字符,字节和数值这种基础类型。 序列类型还可以按照是否可以修改赖分类。 - 可变序列 list,bytearray,...
Ajax跨域请求
首先说明下什么是跨域?其实就是两个不同的站,比如a.abc.com,另外一个b.abc.com。a站需要请求b站的接口,这时就发生了跨域,那么跨域一般是怎么解决的呢?下面简单介绍下。 通过jsonp跨域 什么是jsonp?维基百科的定义是:JSONP(JSON with Padding)是资料格式 JSON 的一种“使用模式”,可以让网页从别的网域要资料。 JSONP也叫填充式JSON,是应用JSON的一种新方法,只不过是被包含在函数调用中的JSON,例如: callback({"name","trigkit4"});
JSONP由两部分组成:...
申请Let's Encrypt通配符证书
Let's Encrypt终于支持通配符证书了,也就是说你只需要为你的网站申请*.example.com这样一个证书,所有的子域名都可以支持,下面介绍下申请方法:
首先需要获取acme.sh
curl https://get.acme.sh | sh
acme.sh支持自动配置DNS,这样需要在域名控制后台获取AppKey和AppSecret.常见的阿里,Dnspod等都支持,这里有更详细的介绍:传送门 下面以Dnspod为例,首先获取AppKey和AppSecret 传送门.然后执行如下命令:
替换成从Dnspod后台获取的密钥
export DP_Id="DP...
Asp.Net 中的异步死锁
首先大概介绍下async和await这两个关键字。 在.Net 4.5中,微软为了方便异步编程提供了async和await这两个关键字,使用他们,可以使我们很方便的实现自己的异步代码,而不用太去关心其内部原理。那么他们的主要作用使什么呢? async关键字加在方法的声明上,他的主要目的使为了使方法内部的await关键字生效。而方法的返回值也一般是Task或者Task<T>类型。这些Task类型一般相当于是future,用来在异步方法结束时通知主程序。如下面示例代码: public async Task DoSomethingAsync() { int val = 1;...