函数 Python

函数是组织好的,可重复使用的,用来实现单一或者相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。

1. 函数

函数定义以def关键词开头,后面接函数标识符和括号(),以冒号起始函数体,函数体需要缩进。圆括号之间可以定义参数,任何传入参数和自变量都必须放在括号中间。函数的第一行语句可以选择性的使用文档字符串,用于存放函数错明。return [表达式]结束函数,返回值如果不携带默认返回None。

def function_name(parameters): 
    ["函数文档字符串"]
    ...
    return [expression]

函数被调用很简单,只需要在执行的位置调用即可,入参类型根据自己需求进行确定。

1.1. 不可变与可变参数

在Python中,类型属于对象,变量没有类型。比方说a=[1,2,3]与a="Hello",在代码中[1,2,3]是list,"Hello"是string类型,而变量啊是没有类型的,它只是一个对象的引用,可以是list类型对象,也可以是指向string的类型对象。

在Python中,string,tuples和numbers是不可更改的对象,而list,dict等则是可以修改的对象。

1. 对于不可以变更类型,变量赋值a=1后再去赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而原来的5被丢弃,不是改变了a的值。若是这种类型的数据传入函数中,类似于C++中的数值传递,函数内部对于这个入参的任何修改都不会影响到函数体外面的对象实体。

2. 可变类型,一个list=[1,2,3,4]后再赋值list[2]=9,则改变了list的第三个元素的值,list本身是没有被修改的。若是这种类型的参数参数传入函数中,类似于C++中的引用传递,值被修改以后,函数体调用外的对象实体值也是被修改的。

def ChangeInt( a ):
    a = 10
 
b = 2
ChangeInt(b)
print b # 结果是 2

# 可写函数说明
def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print "函数内取值: ", mylist
   return
 
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print "函数外取值: ", mylist

1.2. 参数类型

函数定义过程中包含参数分为必备参数、关键字参数、默认参数和不定长参数。必备参数和正常C/C++中参数函数一样,参数传递数量和顺序必须是严格匹配的。其中默认参数概念和C/C++一样,标识参数在没有传入的情况下,按照定义的默认值进行赋值。关键字参数只我们再进行参数传递过程中,直接指定参数名字的方式进行参数传递,这种情况下就可以不考虑传入参数的顺序,默认会进行参数匹配。如下实例给出了默认值参数和关键值参数的实例。

>>> def func_default(name, age=10):
...     print(name)
...     print(age)
... 
>>> func_default(name="eric")
eric
10
>>> func_default(age=20, name="eric")
eric
20

对于不定参数参数,与C/C++中可变长参数概念一致,函数头定义def functionname([formal_args,] *var_args_tuple ):。其中,星号*会存放所有未命名的变量参数。

>>> def func_var(arg1, *vartuple):
...     print(arg1)               
...     for var in vartuple:      
...             print(var)
...     return
... 
>>> func_var(70, 60, 50)
70 60 50

2. lambda表达式

lambda表达式比def函数体简单,其主体是一个表达式,而不是一个代码块。lambda表达式有自己的命名空间,且不能访问自由参数列表之外或全局命名空间的参数。

lambda [arg1 [, arg2, ... argn]]]: expression
>>> sum = lambda arg1, arg2: arg1 + arg2
>>> print(sum(10,20))
30

3. 变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问,权限决定于这个变量赋值的位置,两种变量作用域是全局变量和局部变量。当前定义在函数体内部的变量拥有局部作用域,定义在函数之外的拥有全局作用域。局部变量只能在函数体内部访问,全局变量可以在整个程序范围内访问。

>>> total = 0
>>> def sum(arg1, arg2):
...     total = arg1+arg2
...     print(total)
...     return total
... 
>>> sum(10, 20)
30
>>> print(total)
0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值