函数基础

函数的定义

def 函数名(形参列表):	
	函数体
	[return [返回值]]
# []表示[]里的内容可有可没有(可以没有return也可以只有return没有返回值)
def是关键字.
函数名是符合命名规范的名字即可.
形参列表是符合命名规范的多个变量,变量中间用逗号分隔

形参列表:

a,b,c --> 位置参数(按照出现的顺序给形参赋值)

addr='BeiJing' --> 默认参数(可以不用赋值)

可变参数:

*args --> 可变的位置参数,多个出现的位置参数,使用一个元组名接收.

**kwargs --> 可变的关键字参数,多个出现的键值对参数,使用的是一个字典接收.

可变的关键字参数一定放在最后,可变的位置参数一定在位置参数之后.

def f1(name,addr='BeiJing',*args,**kwargs):
    print(name,addr,args,kwargs)
# 不推荐使用,addr默认值参数起不到作用.

def f2(name,*args,addr='BeiJing',**kwargs):
    print(name,addr,args,kwargs)

f2('Andy',1,2,3,addr='tianjin',email='abc@abc.com')

补充

list() tuple()  --> 方法名

def等  -->关键字(没有加括号)

查看Python中所有的关键字(33个)

>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

函数的使用

使用返回值:

​ 直接打印:print(add(1,2))

​ 把一个函数的调用,当成另一个函数的参数

​ sum(add(1,2),add(3,4))

不使用返回值:单独调用:直接函数名(参数),不关心函数的返回值.

函数名当成函数的返回值:

函数名当成函数的返回值:

def outer():
	def inner():
		....
	return inner			# 返回内层函数的定义,是一个地址

函数是一等公民!

函数的地位和变量一样,可以当成参数传递,可以给变量赋值.

高阶函数

可以接收一个函数作为参数的函数,称为高阶函数.

def func(f):		# 当f是一个函数时,func就称为高阶函数.
	pass
	

Python中常见的高阶函数:

map(function, iterable) # 返回值:返回迭代器

filter(function, iterable) # 返回一个迭代器对象

sorted(iterable, key=None, reverse=False) # 返回值:返回重新排序的列表。
# function – 判断函数。
# iterable – 可迭代对象。
# key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定		  可迭代对象中的一个元素来进行排序。
# reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
lst=[-1,2,-3,4]

def f(x):
    return abs(x)

res = map(f,lst)
for x in res:
    print(x)
# 1 2 3 4
filter函数如果不指定功能参数,默认使用bool(x)操作每一个元素!用以获取一个布尔值.
lst=[-1,2,-3,4]

def f2(x):
    if x > 0:
        return True
    elif x < 0:
        return False

f = filter(f2,lst)
for x in f:
    print(x)
# 2 4

为了替换高阶函数中参数函数的繁琐定义,使用lambda表达式!!!
f = filter(lambda x:True if x >= 0 else False,lst)
lambda表达式最主要的使用场景:和高阶函数配合使用,充当高阶函数的参数!!!
sorted是形成了一个新的排序后的结果,通常会赋值给一个变量
lst = [2,1,5,9]
res = sorted(lst)
print(res)
# [1,2,5,9]

推导式

高阶函数的替代者

列表推导式:
res = [包含了变量的表达式 for 变量 in 可迭代对象]

用来替换map函数:
前面的包含了变量的表达式就是map中的业务逻辑
可迭代对象就是map中的数据源
filter
res = [满足条件的元素 for 变量 in 可迭代对象 if条件判断]
filter业务逻辑使用if来实现
数据源来自可迭代对象

列表推导式[]、字典推导式{:}、集合推导式{}、没有元组推导式,用()括起来的是:生成器表达式.

补充

[x for x in dir(json) if not x.startswith('_')]
[x for x in dir(os) if not x.startswith('_')]
[x for x in dir(sys) if not x.startswith('_')]
[x for x in dir(time) if not x.startswith('_')]
[x for x in dir(list) if not x.startswith('_')]  ***
[x for x in dir(tuple) if not x.startswith('_')]
[x for x in dir(set) if not x.startswith('_')]
[x for x in dir(dict) if not x.startswith('_')] ***
posted @ 2019-03-23 14:55  blog_wu  阅读(240)  评论(0编辑  收藏  举报