概述
参数
1普通函数:
没有参数
def abs():
print(''hello world!'')
return
必须参数
def abs(x):
if x>=0:
return x
else:
return -1
默认参数
def printName(x=0,y=1,z )
print(x,y,z)
return
可变参数:
我们的传入参数是动态的怎么办? 1变成list 2 可变参数
1
def sum(list)
2
def sum(*numbers)
sum=0
for number inunmbers
sum+=number
sum(0,1,2,3,4)
关键字参数:
如果我们还想继续在参数中添加其他信息怎么办?添加关键字参数;
def printName(name, **other)
print('name:' , name , 'other:' , other)
priintNmae('caomei',age=20)
命名关键字参数:对于printName函数,如果不允许随意添加新的参数;可以使用命名函数实现;
def printName(name,gender,*,age,city):
print(name,gender,age,city)
print('caomei','w',20,'xan')
变量
全局变量:函数外声明的是全局变量,
局部变量:函数内是局部变量;
global关键字:
在函数内使用global关键字 将局部变量变成 全局变量
num=1
def modify():
global num
num=2
return num
modify()
print()
nonlocal 关键字:
内嵌函数 想要 修改上已成函数变量 接著nonloacl 关键字
def modify():
num=1
def modify1():
nonlocal num
num=2
modify1()
return num
print( modify() )
nonlocal num可以修改上面的名字
变量的作用域:
局部变量 local
闭包函数外的函数作用域
全局作用域
内建作用域
num =int(1.2) #内建
g_num =2
def out_fun():
o_num=3 #闭包外
def in_fun():
l_num=4 #局部变量
高阶函数
把函数作为参数传入另一个 函数
1 函数名也是变量:
可以把求绝对值 函数abs计算结果赋值给变量;
num=abs(-5)
num=abs
num(-5)
2函数作为参数是传入另一个函数:
def plus(num1,num2,func ):
return func(num1)+ func(num2)
print( plus (-3,-4,abs ) )
调用publs时候,可以把函数传入里面
常见的内置高阶函数:
1map映射函数
map()映射函数:
可以接受两个参数,一个参数是函数,另一个参数 是可以迭代对象;
bad_name= ['aBc' , 'XAvl' , 'iNiEsa' ]
print(bad_name)
def CorrectName(name):
return (name.lower().caption() )
good_nmae=map(CorrectName,bad_name )
print(list(good_name))
[ ‘Messi’ , ‘Xavi’ , ‘Iniesta’ ]
2reduce() 序列计算函数
类似于map()函数,reduce()传入数据必须有两个参数
使用reduce()实现求乘积
from functools import reduce
numbers=[1,2,3,4,5]
def f(x,y):
return x*y
print(reduce(f,numbers))
3filter()条件过滤函数
o
类似于map(),但是根据返回值是false还是true,决定是保留还是丢弃改元素;
得到奇数:
num=range(1,11)
def f(x):
return x%2==1
odds= filter(f,numbers)
print( list ( odds) )
filter函数还可以删除一个列表中的所有空的字符串:
old_strs= ['messi','xavi','' ,None]
print( old_strs )
def f(x):
return x and x.strip()
new_strs=filter(f,old_strs)
print(list(new_strs) )
4sorted()排序函数
sort普通的是排序函数
sorted是高阶函数
numbers=[1,2,3-4]
sorted(numbers)
sorted( numerbs , key =abs )
sorted( playes )
sorted( playes , key=str.lower )
sorted( playes,key=str.lower,reverse=True )
闭包
高阶函数 除了做参数以外,还可以把参数作为结果返回;
函数返回参数,或者返回作用名字!
def Greeting(predix):
def greeting(postfix):
print(prefix,postifx)
return greeting
此时在Greeting就是闭包函数
闭包特性:
1 闭包函数必须有内嵌函数,必须返回内嵌的函数
2 内嵌函数引用上一级函数的变量;
装饰器
为什么要引入装饰器:
开放封闭原则: 就是对扩展是开放的,对修改是封闭的;
就是在不修改原有的代码( 包括函数,实现的调用方式 ),就可以为程序添加新功能!
比如模拟一个 博客园登录系统;
login_status = {
'username': None,
'password':None,
'status': False,
}
def auth(func):
def inner(*args,**kwargs):
if login_status['status']:
ret = func()
return ret
if 微信:
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
if username == 'camei' and password == '123':
login_status['status'] = True
ret = func()
return ret
elif 'qq':
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
if username == 'camei' and password == '123':
login_status['status'] = True
ret = func()
return ret
return inner
@auth
def diary():
print('欢迎访问日记页面')
@auth
def comment():
print('欢迎访问评论页面')
@auth
def home():
print('欢迎访问博客园主页')
diary()
comment()
home()
匿名函数
当调用 函数时,有时不需要显示定义一个函数,匿名函数更加方便;
lambda 参数1【,参数2,参数n】: 表达式
特点:
只有一个表达式,函数体 比def简单很多;
lambda 拥有自己的命名空间,不能访问自己参数列表之外,不能访问全局参数;
求乘积
sum = lambda x,y : x+y
print(sum(1,2))
求菲波那切数列
fib = lambda n : n if n<=2 else fib(n-1) +fib(n-2)
求偶数数
b=[1,2,3,4,5,6,]
list(filter(lambda x:x%2==0,b) )
偏函数
将 str转化为 int
比如int 提供了base参数
int('100',base=2)
#因此可以构建一个函数
import functools
int2 =functools.partial (int,base=2)
int2('0011')
int2('1111')
最后
以上就是聪明野狼为你收集整理的python3知识点汇总_Python知识点概要(3)函数,总结的全部内容,希望文章能够帮你解决python3知识点汇总_Python知识点概要(3)函数,总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复