python基础(八):函数

函数就是将一些语句集合在一起的部件,他们能够不止一次的程序中运行,函数还能够计算出一个返回值,并能够改变作为函数输入的参数。而这些参数在代码运行时每次都不同。以函数的形式去编写一个操作可以使它成为一个广泛的应用工具。

基本格式:

def  函数名:
    函数体
    return  返回值

定义和调用

定义函数按照前面的基本格式定义函数,调用函数时要使用函数名加括号来调用函数,括号中可以包含一个或多个参数。这些参数将会传递给函数头部的参数名。

#定义
def test(x,y):
    return x*y
#调用
test(5,10)

函数参数

必备参数

func(valule)   函数调用时会通过位置来匹配,调用函数时参数不能省略。

默认参数(关键字参数)

func(name=value)  函数如果在调用的时候不给参数,就按默认参数的值进行传递,如果在调用函数时给默认参数重新赋值则原值会被覆盖,

def func(name="Joe"):
    print(name)

func()
>>>Joe

func("AustinJoe") #func(name="AustinJoe")也是可以的
>>>AustinJoe

不定长参数

  1. func(*args) 将所有位置相关的参数收集到一个新的元组之中,并将这个元组值赋值给变量args。*可以匹配任意长度和数目的参数。
def func(*args):
    print(args)

func(*(1,2,3,4))#func(1,2,3,4)这种形式也是可以的
>>>(1, 2, 3, 4)

func([1,2,3],‘hello‘,‘python‘)
>>>([1, 2, 3], ‘hello‘, ‘python‘)

   2.func(**kwargs)与上面类似,但是是将参数收集到字典中。

def func(**kwargs):
    print(kwargs)

func(a=1,b=2)
>>>{‘b‘: 2, ‘a‘: 1}

func(**{‘a‘:1,‘b‘:2})>>>{‘a‘: 1, ‘b‘: 2}

解包参数

在python中我们可以用*和**对参数解包。

def func(a,b,c,d):
    print(a,b,c,d)
args=(1,2,3,4)
func(*args)
>>>1 2 3 4
def func(a,b,c,d):
    print(a,b,c,d)
args={‘o‘:1,‘b‘:2,‘c‘:3,‘d‘:4}
func(**args)
>>>1 2 3 4

注意

参数类型是可以混合使用的,但必须遵循以下法则:

  1. 在函数调用中,参数必须以此顺序出现:位置参数,后面跟着任何关键字参数,然后是*args,最后跟着**kwargs。
  2. 在函数头部,参数必须以此顺序出现:一般参数后面紧跟着默认参数,如果有的话后面是*args,最后是**kwargs。

匿名函数:lambda

lambda是一个表达式,表达式创建了一个之后能够调用的函数,但是他返回了一个函数而不是将这个函数赋值给变量名。

其一般格式为:

lambda:argument1,argument2··· argumentN :expression using arguments
f = lambda x, y, z: x + y + z
print(f(2, 3, 4))
>>>9

lambda表达式常常与map()和filter()函数结合使用,我们接下来就学习这两个函数。

map():在序列中映射

map函数会对一个序列对象中的每个元素应用被传入的函数,并且返回了包含所用函数调用结果的一个列表。

l=list(map((lambda x:x+2),[1,2,3,4]))
print(l)

>>>[3, 4, 5, 6]
l=list(map(pow,[1,2,3],[5,6,7]))
print(l)
>>>[1, 64, 2187]

filter():过滤元素

filter()函数会根据测试函数过滤出一些元素。

l=list(filter((lambda x:x>0),range(-10,10)))
print(l)
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9]

reduce()

reduce()函y数会对每一个元素应用函数并运行到最后结果。

from functools import reduce
result=reduce((lambda x,y:x+y),[1,2,3,4])
print(result)

>>>10

闭包:函数嵌套(间接函数调用)

闭包是指函数外面调用函数里面的的函数,即函数嵌套。

def main():
    print("hello world")
    def nest():
        print("我是嵌套的函数!")
    return nest
# 第一种形式
main()()

>>>hello world
>>>我是嵌套的函数!
# 第二种形式
m=main()
m()

>>>hello world
>>>我是嵌套的函数!

递归函数

递归函数的使用要注意:

  1. 递归的次数在python中是有限制的;
  2. 递归函数使用时占用的内存成几何量增长;
  3. 递归函数要有终止条件。
# 对一个列表求和
def sumtree(L):
    tot = 0
    for x in L:
        if not isinstance(x, list):
            tot += x
        else:
            tot += sumtree(x)
    return tot

L = [1, [1, 2, [6, 7], 3], 4, 5, [9, 8]]
print(sumtree(L))

>>>46

回调函数

函数A的执行取决于函数B中某一条件的执行,则函数A为回调函数。

def main(x):
    if x>5:
        print("回调函数未执行!!")
    else:
        return callback()

def callback():
    print("回调函数执行!!")

main(10)
>>>回调函数未执行!!
main(4)
>>>回调函数执行!!

作用域

作用域法则:

  1. 内嵌的模块是全局作用域;
  2. 全局作用域的范围仅限于单个文件;
  3. 每次对函数的调用都创建了一个本地作用域;
  4. 赋值的变量名除非声明为全局变量和非本地变量,否则均为本地变量;
  5. 所有其他的变量名都可以归纳为本地,全局或者内置的。
X=88
def func(Y):
    Z=X+Y
    return Z
print(func(12))
# 其中X和函数func都是全局变量名,而Y和Z均为本地变量名

global语句

global 语句用来声明一个全局或多个全局变量名。

X = 88

def func():
    global X
    X = 99

func()
print(X)
>> > 99

nonlocal语句

在声明nonlocal变量名时,该变量名必须存在函数的嵌套的作用域,即他们只能存在于一个嵌套的函数中,并且不能有一个嵌套的def中的第一次赋值创建。

def tester(start):
    state = start
    def nested(label):
        nonlocal state
        print(label, state)
        state += 1
    return nested
f = tester(0)
print(f(‘first‘))
>>>first 0
print(f(‘second‘))
>>>second 1
print(f(‘third‘))
>>>third 2

原文地址:https://www.cnblogs.com/austinjoe/p/9420139.html

时间: 2024-11-08 22:02:55

python基础(八):函数的相关文章

python基础——sorted()函数

python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来. Python内置的sorted()函数就可以对list进行排序: >>> sorted([36, 5, -12, 9, -21]) [-21, -12, 5, 9, 36] 此外,sorted()函数也是一个

Python基础07 函数

Python基础07 函数 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以说明这个函数的功能. def square_sum(a,b): c = a**2 + b**2 return c 这个函数的功能是求两个数的平方和. 首先

python基础——匿名函数及递归函数

python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 2 匿名函数举例 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突.此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lam

python基础教程函数参数

python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些关于函数的基础知识和函数传参的知识. 一.函数的相关介绍 1.函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 函数特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 2.函数的定义示例 定义一个函数要使用def语句,依次写出函数名.括

Python学习笔记(一)python基础与函数

1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world >>> print 300 300 >>> print 100+200 300 print语句也可以跟上多个字符串,用逗号","隔开,就可以连成一串输出: >>> print 'The quick brown fox', 'jumps over

第七篇 python基础之函数,递归,内置函数

阅读目录 一 数学定义的函数与python中的函数 二 为何使用函数 背景提要 三 函数和过程 四 函数参数 五 局部变量和全局变量 六 前向引用之'函数即变量' 七 嵌套函数和作用域 八 递归 九 匿名函数 十 函数式编程 十一 内置函数 十二 本节作业 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值范围叫做

python基础之函数,递归,内置函数

一 数学定义的函数与Python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值范围叫做这个函数的定义域 例如y=2*x python中函数定义:函数是逻辑结构化和过程化的一种编程方法. python中函数定义方法: def test(x): "The function definitions" x+=1 return x def:定

Python基础之函数,递归。

一.数学定义的函数与python中的函数 - 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值范围叫做这个函数的定义域 - python中函数定义:函数是逻辑结构化和过程化的一种编程方法. 二. 为何使用函数 1.解决代码重用 2.保持一致性,易维护 3.可扩展性 三. 函数参数 1.形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分

python基础及函数1

Python的程序执行方式:Python的程序编辑窗口.Python的解释器提示符. python常量:整形.实型(浮点型).字符串型. Python数据类型:数值类型.字符串类型.布尔类型.复合数据类型 数值类型:整型(0b/0B.0o/0O.0x/0X).浮点型(e/E).复数型 字符串类型:Python标准字符.转义字符.基本字符串函数 布尔类型:true.false 复合数据类型:列表.元组.字典.集合 Python3提供的有效数字精度:17位 字符串分片: >>>str1=&q

python基础_函数

函数基础 目标 函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数 01. 函数的快速体验 所谓函数,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候 调用 函数的使用包含两个步骤:1.定义函数 -- 封装 独立的功能2.调用函数 -- 享受 封装 的成果 函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 02. 函数基本使用 2.1 函数的定义 定义函数的格式如下: def 函数名(): 函数封装的代码 -- def 是英