Python知识点总结(3)函数

参数

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') 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值