python编写函数calsum_Python函数

Python函数

1.函数定义

def 函数名(参数表列):

"""

函数文档

(函数功能描述)

:param 参数名1:参数1描述

:param 参数名2:参数2描述

......

:return: 函数返回描述

"""

函数体

return 返回值

2.模块调用

import 模块名 as 新的模块名

新的模块名.方法名(参数表列)

3.函数参数

必须参数

必须以正确的顺序传入,且调用时必须与生明时保持一致。

def f(name, age):

print("I am %s, I am %d years old."%(name,age))

f('Eric', 18)

关键字参数

使用关键字参数允许参数调用时和声明时顺序不一致。

f(age=18, name='Eric')

默认参数

若参数缺省,则默认值生效。

def f(name, age, sex = 'male'):

print("I am %s, I am %d years old." % (name, age))

print("Sex:%s"%sex)

f(name = 'lisi', age = 19)

f(name = 'zhangsan', age = 88, sex = 'female')

运行结果

变长(不定长)参数

传入参数个数无限制。

形式参数以一个*号开头,代表一个任意长度的元组(tuple),可以接收连续一串参数。

形式参数以两个*号开头,代表一个任意长度的字典(dict),实际参数的形式是“key=value”(键值对),可以接收连续的任意多个参数。

def 函数名(*args, **kwargs):

函数体

示例:

def self_print1(*args):

print(args)

print(type(args))

self_print1(1, 2, 3, 4, 5, 6, (1, 2))

def self_print2(**kwargs):

print(kwargs)

print(type(kwargs))

self_print2(last_name = 'zhang', first_name = 'san')

def self_print3(*args, **kwargs):

print(args)

print(kwargs)

self_print3('zhangsan', 'lisi', gender1 = '男', gender2 = '女')

运行结果

实际参数以*开头,可将元组、列表、集合拆分为单个元素。

实际参数以**开头,可将字典拆分为单个键值对。

4.函数返回值

函数在执行过程中只要遇到return语句,就会停止执行并返回结果,所以也可以理解为 return 语句代表着函数的结束。

如果未在函数中指定return,那这个函数的返回值为None。

Python可返回多个值。如果return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。

5.递归函数

递归函数:直接或间接地调用自身的函数。

示例:

# 阶乘

def factorial(n):

if n == 1:

return 1

else:

return n*factorial1(n-1)

# 斐波那契数列

def fibonacci(n):

if n == 1 or n == 2:

return 1

else:

return fibonacci(n-1)+fibonacci(n-2)

# 汉诺塔

def hanoi(i, A, B, C):

if i > 0:

hanoi(i - 1, A, C, B)

print(A, '->', C)

hanoi(i - 1, B, A, C)

6.高阶函数

高阶函数:参数或返回值是函数的函数

示例:

绝对值求和

def add_abs(x, y, f):

return f(x) + f(y)

print(add_abs(3, -6, abs))

运行结果

常用库高阶函数

1.map()

map(function, iterable)

该函数会把iterable中的数据依次传递给function函数处理,最后把结果返回。

示例:

def power(x):

return x**2

print(list(map(power, [1, 2, 3, 4, 5])))

print(list(map(lambda x: x**2, [1, 2, 3, 4, 5])))

运行结果

2.reduce()

reduce(function, iterable)

reduce() 函数会对参数列表中的元素进行累积。

function函数必须为接收两个参数的函数,reduce()会把function的运行结果作为一个参数,然后从iterable中再取出一个数据当作另一个参数。

3.filter()

filter(function, iterable)

filter() 函数会根据function来过滤iterable。

具体做法是:将iterable中的数据依次传入函数function中,如果函数返回True,则保留该数据,反之则不保留。

4.sorted()

sorted(key=None, reverse=False)

sorted()函数会对iterable进行非原地排序(不修改原对象)。

通过参数key(参数key是一个函数)来选取参与比较的元素。

7.匿名函数

lambda表达式

lambda 形参列表: 函数返回值表达式语句

示例:

def cal(x, y):

if x > y:

return x*y

else:

return x/y

calc = lambda x, y:x*y if x > y else x/y

print("常规函数调用:",cal(5,4))

print("使用lambda:",calc(5,4))

print("常规函数调用:",cal(2,4))

print("使用lambda:",calc(2,4))

运行结果

排序经常使用lambda表达式

示例:

stus = [

{'name': 'zhangsan', 'age': 33},

{'name': 'lisi', 'age': 12},

{'name': 'wangwu', 'age': 53},

{'name': 'zhaoliu', 'age': 18},

{'name': 'tianqi', 'age': 77}

]

print('排序前:', stus)

# key值是按照哪个元素为依据进行排序

res = sorted(stus, key=lambda item:item['age'])

print('根据年龄排序后:', res)

res = sorted(stus, key=lambda item:item['name'])

print('根据姓名排序后:', res)

运行结果

8.内置函数

abs() dict() help() min() setattr()

all() dir() hex() next() slice()

any() divmod() id() object() sorted()

ascii() enumerate() input() oct() staticmethod()

bin() eval() int() open() str()

bool() exec() isinstance() ord() sum()

bytearray() filter() issubclass() pow() super()

bytes() float() iter() print() tuple()

callable() format() len() property() type()

chr() frozenset() list() range() vars()

classmethod() getattr() locals() repr() zip()

compile() globals() map() reversed() __import__()

complex() hasattr() max() round()

delattr() hash() memoryview() set()

9.函数作用域

(1) 四种作用域

L:local,局部作用域,即函数中定义的变量。

E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的。

G:global,全局变量,就是模块级别定义的变量。

B:built-in,系统固定模块里面的变量,比如int, bytearray等。

搜索变量的优先级顺序依次是:局部作用域>外层作用域>当前模块中的全局>python内置作用域(LEGB)。

注意:local和enclosing是相对的,enclosing变量相对上层来说也是local。

(2) 作用域的产生

在Python中,只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if、try、for等)是不会引入新的作用域的。

(3) 变量的跨域修改

对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量。

当修改的变量是在全局作用域(global作用域)上时,需要使用global关键字先声明。

当修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时,需要使用nonlocal关键字声明。

10.用户自定义函数特殊属性

属性

意义

读写性

__doc__

该函数的文档字符串,没有则为 None;不会被子类继承。

可写

__name__

该函数的名称。

可写

__qualname__

该函数的 qualified name。

可写

__module__

该函数所属模块的名称,没有则为 None。

可写

__defaults__

由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 None。

可写

__code__

表示编译后的函数体的代码对象。

可写

__globals__

对存放该函数中全局变量的字典的引用 --- 函数所属模块的全局命名空间。

只读

__dict__

命名空间支持的函数属性。

可写

__closure__

None 或包含该函数可用变量的绑定的单元的元组。

只读

__annotations__

包含参数标注的字典。字典的键是参数名,如存在返回标注则为 'return'。

可写

__kwdefaults__

仅包含关键字参数默认值的字典。

可写

查看函数文档

print(函数名.__doc__)

help(函数名)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值