怎么看网站室哪做的,安装wordpress步骤,网站文章页内链结构不好可以改吗,常用的网站推广1.函数类型
函数也是一种类型#xff0c;我们自定义的函数就是函数对象#xff0c;函数名保存了函数对象的引用#xff08;地址#xff09;
def test():print(我是测试函数)
print(test) #函数名是变量#xff0c;指向了函数对象
pf test #pf变量也指向了函数对…1.函数类型
函数也是一种类型我们自定义的函数就是函数对象函数名保存了函数对象的引用地址
def test():print(我是测试函数)
print(test) #函数名是变量指向了函数对象
pf test #pf变量也指向了函数对象所以也可以通过pf调用test函数
pf()
2. 匿名函数
不再使用def 函数名()这种形式定义函数而是使用lambda来创建匿名函数
特点 lambda只是一个表达式函数体比def定义的函数简单的多 lambda的函数体不再是代码块,而是一个表达式 lambda只有一行运行效率很高
语法
lambda [arg1,arg2....argn]:表达式(只能是一个表达式)
add lambda a,b:a b
print(add(3,5))
3.传入函数(理解)
一个函数就可以接收另一个函数作为参数这种函数就称之为高阶函数也可以称之为传入函数。可以实现通用编程排序等复杂功能
#传入函数,高阶函数
#能被2整除数的和
def sum_even(n):sum 0for i in range(1,n1):if i % 2 0:sum ireturn sum
#能被7整除的数的和
def sum_seven(n):sum 0for i in range(1,n1):if i % 7 0:sum ireturn sum
#能被3和5整除但不能7整除的数的和
def sum_fifteen(n):sum 0for i in range(1,n1):if i % 15 0 and i % 7 ! 0:sum ireturn sum
#通用求和函数
def sum1(n,callback):功能求满足callback规定条件的数的和:param n: 大于0的整数:param callback: 用于判断一个数是否满足指定条件由调用者传入,有一个参数形如def callback(n):return: 求和的结果sum 0for i in range(1,n1):if callback(i):sum ireturn sum
print(sum1(100,lambda x:x%20))
print(sum1(100,lambda x:x%70))
print(sum1(100,lambda x:x%150 and x % 7 ! 0))
4.闭包
我们可以在一个函数中再定义一个函数在函数内部定义的函数称之为内部函数内部函数只能在函数内使用不会污染外部空间。定义内部函数的函数称之为外部函数这样的定义构成函数的嵌套
def outter(a): #外部函数x 10def inner(y): #内部函数print(x y)inner(a)outter(20) 内部函数只能在外部函数里调用外界无法直接调用内部函数
在一个外部函数中定义了一个内部函数内部函数里引用了外部函数的变量并且外部函数的返回值是内函数的引用。这样内部函数和其执行所需的环境变量就构成了一个闭包。
一般情况下如果一个函数结束函数的内部所有东西都会释放掉局部变量都会消失。但是闭包是一种特殊情况如果外函数在结束的时候发现有自己的局部变量将来会在内部函数中用到就把这个局部变量绑定给了内部函数然后自己再结束。
def outter(a): #外部函数x adef inner(y): #内部函数return x y #引用外部变量return inner #返回内部函数闭包
pf outter(20)
print(pf(10)) #30
print(pf(20)) #40
在闭包中无法直接修改外部变量x的值
def outter(a): #外部函数x adef inner(y): #内部函数# x 10 #UnboundLocalError: local variable x referenced before assignmentreturn x yreturn inner
在python3中可以通过nonlocal关键字声明一下x表示这个变量不是局部变量需要向上一层变量空间找这个变量。
def outter(a): #外部函数x adef inner(y): #内部函数nonlocal xx 10return x yreturn inner
5.偏函数
当一个函数有大量参数调用的时候非常不方便可以使用偏函数技术将一些参数固定给默认值达到简化函数调用的目的。
import functools
def test(a,b,c,d):print(a, b, c, d)
#从前面固定参数使用位置参数就行1a2b
test1 functools.partial(test,1,2)
test1(3,4) #3c 4d
#从后面固定参数需要使用关键字参数
test2 functools.partial(test,c3,d4)
test2(1,2) #1a 2b
#如果固定的参数不连续则需使用关键字参数固定
test3 functools.partial(test,b2,d4)
test3(a1,c3) #需要使用关键字参数否则会报错
6.变量的作用域
程序中的变量并不是在任意的位置都可以随意访问在哪里可以访问取决于这个变量的作用域变量的作用域指的是变量在那段代码中可以使用可以使用变量的那段代码就是变量的作用域。在python中只有函数/类/模块才引入作用域if/elif/else , while/for,try/except等并不会引入新的作用域
#if语句不引入新作用域msg在外面可以使用
if True:msg message
print(msg)
6.1 变量作用域的分类
按照作用域划分可以分为 LLocal局部作用域 EEnclosing闭包作用域【闭包的外部函数中定义的变量】 GGlobal全局作用域 在所有函数外定义的变量 BBuilt-in內建作用域【内置作用域】
#1 局部作用域
#局部变量只能在函数内部使用外部无法引用
#局部变量的作用域从定义开始到函数体结束
def demo():num 20 #局部变量 print(num)
demo()
#print(num) 错误
#闭包作用域
def outter():x 10 #函数作用域,从定义开始到本函数结束def inner():y x #在闭包中可以引用print(y)return inner
pf outter()
pf() #执行闭包
print(pf.__closure__)
#全局作用域
x 100 #全局作用域 从定义开始到本文件结束
def demo():print(x)
print(x)
#内建作用域是指系统内建的函数或常量在系统载入时加载在所有模块中都可以直接引用
#比如说系统函数
print(max(1,2,3)) #max函数就是内建作用域 哪里都可以引用
def demo():x 30y 50print(max(x, y))
6.2 变量作用域查找规则
以 L -- E -- G --B 的规则查找即在局部找不到便会去局部外的局部找例如闭包再找不到就会去全局找最后到内建作用域中找。
6.3 全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域被称为局部变量
定义在函数外面的变量拥有一个全局作用域被称为全局变量
局部变量和全局变量同名局部优先
total 0 #全局变量
def sum(arg1,arg2):total arg1 arg2 #局部变量print(函数内部,total)return totalsum(10,20)
#print(total1)
print(函数外部,total)
num 1
def fun1():print(num) #UnboundLocalError: local variable num referenced before assignmentnum 123print(num)
fun1()
6.4 global和nonlocal
#1.在Python中当内部作用域想修改全局变量的时候则就要使用global关键字进行声明
num 1
def fun1():global num #告诉编译器此处的num是全局变量print(num) #1num 123print(num) #123fun1()
a 10
def test():global aa a 1print(a)
test()
#2.如果要修改函数作用域中的变量则使用nonlocal
#需要明确的是nonlocal关键字定义在闭包里面
x 0 #全局作用域
def outer():x 1 #闭包作用域
def inner():nonlocal xx 2 #局部作用域print(inner:,x) #2
inner()print(outer,x) #1----2
outer()
print(全局,x) #0
#nonlocal关键字声明了该变量不只是在outer函数中有效,在inner函数内部也有效