栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 函数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 函数

函数是 Python 中最主要也是最重要的代码组织和复用手段。作为最重要的原则,如果你要重复使用相同或非常类似的代码,就需要写一个函数。通过给函数起一个名字,还可以提高代码的可读性。

创建函数

函数使用def关键字声明,使用return关键字返回结果:

def my_function(x, y, z=1.5):
    if z > 1:
        return z * (x + y)
    else:
        return z / (x + y)

函数可以拥有多个return语句,但是如果函数一个return语句都没有则返回None

函数参数

函数的参数有位置参数(positional)和关键字参数(keyword),关键字参数通常用于指定默认值或可选参数
上面的函数中x,y是位置参数,z是关键字参数,x,y参数为必须要有的,z参数可以不要直接用默认值。
也就是说,该函数可以下面这两种方式进行调用:

my_function(5, 6, z=0.7)
my_function(3.14, 7, 3.5)
my_function(10, 20)

关键字参数必须在位置参数之后,位置参数可以不用写参数名称,直接填写参数值(不过这种情况下,参数的顺序需要和定义函数的参数顺序一致,如果不想一致必须使用参数名称以确定参数值是指的哪个参数)

my_function(x=5, y=6, z=7)
my_function(y=6, x=5, z=7)

变量作用域

一个程序的变量并不是在哪里都可以访问的,变量的作用域取决于家这个变量是在哪里赋值的
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称,两种最基本的作用域如下:
全局变量
局部变量

全局变量和局部变量

定义在函数内部的变量是局部变量,定义在函数外部的变量是全局变量
局部变量只能在函数内部访问,而全局变量可以在整个程序中访问,调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
   #返回2个参数的和."
   total = arg1 + arg2 # total在这里是局部变量.
   print "函数内是局部变量 : ", total
   return total
 
#调用sum函数
sum( 10, 20 )
print "函数外是全局变量 : ", total

以上实例输出结果:

函数内是局部变量 :  30
函数外是全局变量 :  0

虽然可以在函数中对全局变量进行赋值操作,但是那些变量必须用 global 关键字声明成全局的才行:

In [168]: a = None

In [169]: def bind_a_variable():
   .....:     global a
   .....:     a = []
   .....: bind_a_variable()
   .....:

In [170]: print(a)
[]

匿名函数

python 使用 lambda 来创建匿名函数。

lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

def short_function(x):
    return x * 2

equiv_anon = lambda x: x * 2

本书其余部分一般将其称为 lambda 函数。它们在数据分析工作中非常方便,因为你会发现很多数据转换函数都以函数作为参数的。直接传入 lambda 函数比编写完整函数声明要少输入很多字(也更清晰),甚至比将 lambda 函数赋值给一个变量还要少输入很多字。看看下面这个简单得有些傻的例子:

def apply_to_list(some_list, f):
    return [f(x) for x in some_list]

ints = [4, 0, 1, 5, 6]
apply_to_list(ints, lambda x: x * 2)

再来看另外一个例子。假设有一组字符串,你想要根据各字符串不同字母的数量对其进行排序:

In [177]: strings = ['foo', 'card', 'bar', 'aaaa', 'abab']

这里,我们可以传入一个 lambda 函数到列表的sort方法:

In [178]: strings.sort(key=lambda x: len(set(list(x))))

In [179]: strings
Out[179]: ['aaaa', 'foo', 'abab', 'bar', 'card']

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号