Python的函数参数总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的函数参数总结相关的知识,希望对你有一定的参考价值。

参考技术A import math

a = abs
print(a(-1))
n1 = 255
print(str(hex(n1)))

def my_abs(x):
# 增加了参数的检查
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x

print(my_abs(-3))

def nop():
pass

if n1 >= 255:
pass

def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)

tup = move(100, 100, 60, math.pi / 6)
print(tup)
print(isinstance(tup, tuple))

def quadratic(a, b, c):
k = b * b - 4 * a * c
# print(k)
# print(math.sqrt(k))
if k < 0:
print('This is no result!')
return None
elif k == 0:
x1 = -(b / 2 * a)
x2 = x1
return x1, x2
else:
x1 = (-b + math.sqrt(k)) / (2 * a)
x2 = (-b - math.sqrt(k)) / (2 * a)
return x1, x2

print(quadratic(2, 3, 1))

def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s

print(power(2))
print(power(2, 3))

def enroll(name, gender, age=8, city='BeiJing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)

enroll('elder', 'F')
enroll('android', 'B', 9)
enroll('pythone', '6', city='AnShan')

def add_end(L=[]):
L.append('end')
return L

print(add_end())
print(add_end())
print(add_end())

def add_end_none(L=None):
if L is None:
L = []
L.append('END')
return L

print(add_end_none())
print(add_end_none())
print(add_end_none())

def calc(*nums):
sum = 0
for n in nums:
sum = sum + n * n
return sum

print(calc(1, 2, 3))
print(calc())

l = [1, 2, 3, 4]
print(calc(*l))

def foo(x, y):
print('x is %s' % x)
print('y is %s' % y)

foo(1, 2)

foo(y=1, x=2)

def person(name, age, **kv):
print('name:', name, 'age:', age, 'other:', kv)

person('Elder', '8')
person('Android', '9', city='BeiJing', Edu='人民大学')

extra = 'city': 'Beijing', 'job': 'Engineer'
person('Jack', 24, **extra)

def person2(name, age, *, city, job):
print(name, age, city, job)

person2('Pthon', 8, city='BeiJing', job='Android Engineer')

def person3(name, age, *other, city='BeiJing', job='Android Engineer'):
print(name, age, other, city, job)

person3('php', 18, 'test', 1, 2, 3)
person3('Php2', 28, 'test', 1, 2, 3, city='ShangHai', job='Pyhton Engineer')

def test2(a, b, c=0, *args, key=None, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'key=', key, 'kw =', kw)

test2(1, 2, 3, 'a', 'b', 'c', key='key', other='extra')

args = (1, 2, 3, 4)
kw = 'd': 99, 'x': '#'

test2(*args, **kw)

Python高阶函数总结

***高阶函数
知识的1、函数本身可以赋值给变量,即:变量可以指向函数
知识点2、函数名也是变量
知识点3、函数的参数能够接受别的函数,这种函数为高阶函数

如:
def add(x,y,f):
return f(x) + f(y)
Python内建了map()和reduce()
***高阶函数map()
map()函数接受两个参数,1个是函数,一个是序列,把序列的每一个元素按函数的方式进行计算,计算的返回值即是map()函数的返回值(一个序列)

map()把运算规则抽象了,除了计算简单的f(x)=x*x,而且还可以计算复杂的函数,比如map(str,[1,2,3,4,5,6,7,8,9])

***高阶函数reduce()
reduce()函数也接受两个参数(1个是函数,一个是序列),也是把函数作用在序列上(如[x1,x2,x3,x4,x5]),但是该参数函数必须接受2个参数,reduce继续把结果和下一个序列元素做累积计算,
其效果即是reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(f(x1,x2),x3),x4),x5)
>>> def fn(x,y):
return x*10 + y
>>> reduce(fn,[1,2,3,4,5])
12345

***高阶函数filter()
Python内建的filter()函数用于过滤序列
和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

在一个list中,删掉偶数,只保留奇数,可以这么写
def is_odd(n):
return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 结果: [1, 5, 9, 15]

用filter()这个高阶函数,关键在于正确实现一个“筛选”函数

***高阶函数sorted()和排序算法
Python内建的sorted()函数可以对list进行排序

通常规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。

另外,sorted()也是一个高阶函数,可以接收一个自定义的比较函数实现自定义的排序
如sorted([36, 5, 12, 9, 21], lambda x, y: y - x) 和sorted([36, 5, 12, 9, 21][::-1]


高阶函数总结:
1、map\reduce\filter\sorted函数都可以接收一个函数f和一个序列L,区别是:

map函数把序列中的各个元素都按f进行执行,返回一个序列

reduce函数把序列计算前2个的结果,然后用结果继续后后面的元素组成函数参数进行计算,一直累积计算,直到返回结果,返回值是一个结果值

filter函数用于过滤序列,自定义过滤规则。返回一个序列

sorted用于排序序列,可以自定义排序规则。返回一个序列

 
























以上是关于Python的函数参数总结的主要内容,如果未能解决你的问题,请参考以下文章

python——函数重点总结

python函数参数传递总结

Python的位置参数、默认参数、关键字参数、可变参数区别

Python学习篇 Python中的函数

python面试总结2(函数常考题和异常处理)

Python参数类型