二、函数进阶

1、概念【特殊用法】:

1、变量可以指向函数

x = abs(-35)print(x)   # 35# 一个普通的变量可以指向一个函数,该变量就可以被当做函数调用f = absprint(f)print(f(-100))def check():   print("check")check()f1 = checkf1()

2、函数也可以作为变量名

# 本质:函数名就是一个指向函数的变量print(abs(-28))# abs = "hello"# print(abs(-7))

3、函数作为参数使用

# 调用形参中的函数,必须和原函数保持一致【注意是否需要传递参数】def test(a,b,fun):   return fun(a) + fun(b)   #abs(43) + abs(-27)print(test(43,-27,abs))  #fun = absdef test1(s1,s2,func):   return func(s1) + func(s2)print(test1("hello","gajghj",len))
2、闭包:

在函数内部定义了另一个函数,即存在外部函数和内部函数

闭包【closure】:在外部函数中定义一个内部函数,并且外部函数的返回值是内部函数的引用。

# 普通函数def show():    print("1111")   return  num1# 闭包def outter():   def inner():       print("inner")   return innerf = outter()   #f = innerf()# 在闭包设置参数,a和b两个变量被称为自由变量【临时变量】# 闭包的优点:在外部函数中定义的变量,在内部函数可以直接访问def outer1(a):   b = 10  def inner1():       print(a + b)  return inner1f1 = outer1(23)  #f1 = inner1f1()# 内部函数设置参数def outer2(a):   b = 10   def inner2(c):       print(a + b + c)  return inner2f2 = outer2(23)f2(12)
3、装饰器:

装饰器【Decorator】:使其他函数在不需要做任何代码的变动下,为函数添加功能,装饰器的返回值也是一个函数。

本质:装饰器的本质就是一个闭包,其作用是将一个函数作为参数,返回另一个函数

# 装饰器函数运行在函数定义的时候   # 装饰器需要返回一个可执行的对象   # 装饰器返回的可执行对象要兼容函数f的参数import  time#1.简单的装饰器def test():   print("hello")# func就是需要被装饰的函数def outer(func):   def inner():       # 增加新功能      print("new~~~~")       # 调用原函数      func()   return  innerf1 = outer(test)f1()# 练习:书写装饰器,计算test函数执行的时间def outer(func):   def inner():       t1 = time.time()        func()    t2 = time.time()    print(t2 - t1)  return  innerf1 = outer(test)f1()#2.带有参数的装饰器def getAge(age):   print(age)# getAge(10)# getAge(-36)# 注意:被装饰的函数有参数,inner不一定需要设置参数,只有当需要在inner内部对参数进行操作的时候,则需要同步def wrapper1(func):   def inner(a):     #数据的校验       if a < 0:           a = -a        func(a)   return  innerf = wrapper1(getAge)f(10)f(-36)# 使用装饰器语法糖# 注意:使用@,必须保证装饰器存在的情况下,才能给函数增加功能def wrapper2(func):   def inner(a):       # 数据的校验       if a < 0:           a = -a     func(a)  return inner@wrapper2def getAge1(age):   print(age)    getAge1(-19)# 参数为不定长参数的装饰器# 使用场景:一个装饰器可以同时作用于多个不同函数的情况def wrapper3(func):   def inner(*args,**kwargs):       # 新增的功能       print("abc")     #调用原函数       func(*args,**kwargs)   return  inner@wrapper3def test(a,b):     print(a,b)test(10,20)@wrapper3def test1(): print("gsjrg")test1()# 多个装饰器作用于同一个函数def wrapper11(func):   def inner(*args,**kwargs):       # 新增的功能       print("装饰器~~~~11")       # 调用原函数       func(*args,**kwargs)   return  innerdef wrapper22(func):   def inner(*args,**kwargs):       # 新增的功能       print("装饰器~~~~22")       # 调用原函数       func(*args,**kwargs)   return  inner@wrapper11    # func:check@wrapper22      # func:被wrapper11装饰之后的函数def check():   print("check")check()#总结:多个装饰器作用于同一个函数的时候,从上往下依次执行,但是,原函数只被调用一次
4、偏函数

通过设定默认参数,可以降低调用的难度,偏函数也可以起到这样的作用

概念:对函数的参数做一些控制的函数

注意:偏函数一般不需要自己定义,直接使用【functools模块其中提供了偏函数的使用】

import  functoolsprint(int("23534"))# print(int("abc345"))  #ValueError: invalid literal for int() with base 10: 'abc345'# 在int中有一个默认参数base,用来指明当前数据的进制print(int("110"))print(int("110",base=10))print(int("1010",base=2))print(int("1010",2))# 自定义一个函数,设置一个默认参数base,默认值设置为2def int2(x,base=2):   return int(x,base)print(int2("1010"))print(int2("1010",10))# 系统的functools模块中提供了偏函数的实现# 参数:已经存在的函数名   默认参数int3 = functools.partial(int,base=2)print(int3("1110"))print(int3("1110",base=10))# 思想:根据一个已经存在的函数,通过修改该函数参数的默认值,生成一个新的函数,被称为偏函数



每周项目:

每周1项目|(05)java邮件开发

每周1项目|(04)javaWeb聊天室

每周1项目|(03)java成绩管理系统

每周1项目|(02)网上书店项目

每周1项目|(01)网上商城项目

框架:

着手的第一个框架项目|SSM之MyBatis入门(上)

什么是SSM?

Asp.net

小程序出多端框架啦!!!!!

教学视频:

java开发集合

PHP全套第一、二套视频和资料

python视频和资料+Python全套(内有爬虫)+ Python高级编程技巧

24课时教程+2大实战项目,拿下Bootstrap,冲刺月薪30k的前端工程师!赶紧来领吧!


基础整理:


python篇?

Python基础知识与常用数据类型(07)

Python基础知识与常用数据类型(06)

Python基础知识与常用数据类型(05)

Python基础知识与常用数据类型(04)

Python基础知识与常用数据类型(03)

Python基础知识与常用数据类型(02)

Python基础知识与常用数据类型(01)


java篇?

java基础知识点整理(5)

java基础知识点整理(4)

java基础知识点整理(3)

java基础知识点整理(2)

java基础知识点整理(1)


其他篇?

javaScript——网页特效

CSS选择器

原来大神们都是这么玩的——不一样的html

最常用的标签(2)——标记语言html

最常用的标签(1)——标记语言html

初识编程世界——标记语言html

未完待续.............................................................

Java调用python获取不到输出 java 调用python函数_java