对python 函数的一些理解

函数的传参

让一个函数接受任意数量的位置参数,可以使用一个 * 参数

def avg(first , *rest):

return (first + sum(rest)) / (1 + len(rest))

print(avg(1,2,3))

为了接受任意数量的关键字参数,使用一个以 ** 开头的参数

import html

def make_element(name , value , **attrs):

keyvals = [‘ %s="%s"‘ % item for item in attrs.items()]

attr_str = ‘‘.join(keyvals)

element = ‘<{name}{attrs}>{value}</{name}>‘.format(name=name , attrs=attr_str  , value=html.escape(value))

return element

str = make_element(‘item‘ , ‘Albatross‘ , size="large" , quantity=6)

p   = make_element(‘p‘ , ‘<spam>‘)

只接受关键字参数的函数

def mininum(*values , clip=None):

m = min(values)

if clip is not None:

m = clip if clip > m else m

return m

minnum = mininum(1,23,43,4,34,3,4, clip=3)

print(minnum)

函数参数注解

>>> def add(x:int , y:int)->int:

...     return x+y

...

>>> str = add(2,3)

>>> str

5

>>> help(add)

Help on function add in module __main__:

add(x:int, y:int) -> int

>>> add.__annotations__

{‘y‘: <class ‘int‘>, ‘return‘: <class ‘int‘>, ‘x‘: <class ‘int‘>}

匿名或内联函数

lambda

>>> add = lambda x, y: x + y

>>> add(2,3)

5

lambad 遇到自由变量时

>>> x =10

>>> a = lambda y : x +y

>>> x = 20

>>> b = lambda y:x+ y

>>> a(10)

30

>>> b(10)

30

>>>

如果你想让某个匿名函数在定义时就捕获到值,可以将那个参数值定义成默认参数

即可,就像下面这样:

>>> x = 10

>>> a = lambda y, x=x: x + y

>>> x = 20

>>> b = lambda y, x=x: x + y

>>> a(10)

20

>>> b(10)

30

partial()

函数允许你给一个或多个参数设置固定的值,减少接下来被调用时的参数个数

def spam(a, b, c, d):

print(a, b, c, d)

>>> from functools import partial

>>> s1 = partial(spam, 1) # a = 1

>>> s1(2, 3, 4)

1 2 3 4

>>> s1(4, 5, 6)

1 4 5 6

>>> s2 = partial(spam, d=42) # d = 42

>>> s2(1, 2, 3)

1 2 3 42

>>> s2(4, 5, 5)

4 5 5 42

>>> s3 = partial(spam, 1, 2, d=42) # a = 1, b = 2, d = 42

>>> s3(3)

1 2 3 42

>>> s3(4)

1 2 4 42

回调函数的使用

def  apply_async(func, args, *, callback):

result = func(*args)

callback(result)

>>> def print_result(result):

... print(‘Got:‘, result)

>>> def add(x, y):

... return x + y

>>> apply_async(add, (2, 3), callback=print_result)

Got: 5

>>> apply_async(add, (‘hello‘, ‘world‘), callback=print_result)

Got: helloworld

闭包函数

#闭包函数

def sample():

n = 0

def func():

print(‘n=‘ , n)

def get_n():

return n

def set_n(value):

nonlocal n

n =value

func.get_n = get_n

func.set_n = set_n

return func

f = sample()

f.set_n(1999)

print(f.get_n())

nonlocal 声明可以让我们编写函数来修改内部变量的值

-- dmo --

import sys

class ClosureInstance:

def __init__(self , locals=None):

if locals is None:

locals = sys._getframe(1).f_locals

self.__dict__.update((key ,value) for key , value in locals.items() if callable(value))

def __len__(self):

return self.__dict__[‘__len__‘]()

def Stack():

items = []

def push(item):

items.append(item)

def pop():

return items.pop()

def __len__():

return len(items)

return ClosureInstance()

s = Stack()

s.push(10)

print(s.pop())

时间: 2024-10-07 18:40:48

对python 函数的一些理解的相关文章

对Python函数对象的理解

秉承着一切皆对象的理念,我们再次回头来看函数(function).函数也是一个对象,具有属性(可以使用dir()查询).作为对象,它还可以赋值给其它对象名,或者作为参数传递. lambda函数 在展开之前,我们先提一下lambda函数.可以利用lambda函数的语法,定义函数.lambda例子如下: func = lambda x,y: x + y print func(3,4) lambda生成一个函数对象.该函数参数为x,y,返回值为x+y.函数对象赋给func.func的调用与正常函数无异

关于python函数的初步理解

为什么要用函数, 用for循环进行累加可以替换len()函数来统计字符串的长度 但是每次对不同的字符串统计长度,就每次都要修改一小部分的代码, 出现了大量的重复工作量. 就好比是包饺子,每次都把所有的细节都做一次,就不好了, 我可以把她写成函数,就好比是做一台全自动饺子机 函数的定义与调用 我们把白菜粉条的饺子机做好了,每次开机子,就有这个口味的可以吃了. 函数的返回值 可是饺子都吃完了,怎么统计吃了多少个呢,可以看机器上的显示器,可以看到包了多少个啊,这就是返回值了.如果加工饺子的时候没有打开

正确理解Python函数是第一类对象

正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象呢? 函数是对象 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性

理解python函数是第一类对象

转自:https://foofish.net/function-is-first-class-object.html.尊重原创,特此声明! ------------------------------------------------------------------ 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First

浅析python函数

慢慢的开始进入状态啦,被明老师说我什么都不会后我觉得是该反思下自己这个学期的学习了,虽然我对实验没有很大的兴趣,但是既然名老师要求我开始做实验,我就跟着小丹师姐好好学学,用Tanger师兄的话来说就是:做实验有利于你理解生物信息学数据处理的原理,也许有一天,未来做生物信息的学弟学妹会看到这段话,就像我在码迷上看到free_mao的博文一样,生物信息还是基于生物的,生物原理必须要理解,不然和做计算机有什么区别呢?以前对书本的知识不够重视,语言的学习进度很缓慢,现在希望能分享一些学习心得体会给大家,

python函数

python函数学习 1. 概述: 函数是重用的程序段,用关键字def来定义,可以任意多次地运行这个语句块,被称为调用函数.Python提供了许多内建函数,比如print(),也可以自己创建函数,这被叫做用户自定义函数,函数能提高应用的模块性,和代码的重复利用率. 2.函数语法: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号(). 任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. 函数内容以冒号起

Python 五、Python函数

一.函数概述 1.函数的基础概念 函数是python为了代码最大程度地重用和最小化代码冗余而提供的基础程序结构. 函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件 函数用于将相关功能打包并参数化 在python中可以创建4种函数: 全局函数:定义在模块中 局部函数:嵌套于其它函数中 lambda(匿名)函数:仅是一个表达式 方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用 函数和过程的联系:每个Python函数都有一个返回值,默认为None,也可以使用"return

python函数装饰器

学习装饰器前提需要了解高阶函数,函数嵌套,函数闭包 python函数装饰器,顾名思义就是装饰函数,为函数添加新功能的的一种方式. 为什么要使用装饰器呢? 因为函数在运行时,如果不使用装饰器对函数进行功能添加,需要修改函数源代码,这样修改无疑会增加程序的冗余和复杂性,也不便于程序员对其进行修改.使用装饰器,可以在不改变函数源代码和调用方式的前提下,使用语法糖@装饰器,对函数功能进行添加. 装饰器本质上就是一个函数. 我们使用一个简单的例子来实现: import time #这是一个装饰器函数名为t

3.关于python函数,以及作用域,递归等知识点

一.使用函数编程的好处. 大大的提高了代码的重用行,重复的逻辑或者操作,可以定义到一个函数里,多次调用. 下面是关于提高代码重用性的例子. 现在老板让你写一个监控程序,监控服务器的系统状况,当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警,你掏空了所有的知识量,写出了以下代码. while True: if cpu利用率 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 if 硬盘使用空间 > 90%: #发送邮件提醒 连接邮箱服务器 发送邮件 关闭连接 i