Python 3(6)函数

Python3 入门专栏

http://blog.csdn.net/column/details/19679.html


Python 函数


函数定义和调用

python 中使用 def 关键字来定义关键,语法如下:
 
def 函数名(参数列表):
    函数体
    return 返回结果
示例:
 
# 函数定义:有返回结果
def my_sum(num1, num2):
    return num1 + num2
# 函数定义:无返回结果,函数中可以使用 return 强制退出方法体
def sum_print(num1, num2):
    sum_num = my_sum(num1, num2)
    print(num1, "+", num2, "=", sum_num)
    # return
# 函数输出
sum_print(12, 2333)             # 输出:12+2333=2345
sum_print(num1=12, num2=23333)  


函数参数

在 python 中,类型属于对象,变量是没有类型的;
Numbers,s tring, tuple, set 是不可更改的对象,而 list,dict 是可以修改的对象;

不可变类型 & 可变类型
  • 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a;
  • 可变类型:变量赋值 lista=[1,2,3,4] 后再赋值 lista[2]=5 则是将 lista 的第3个元素值更改,本身 lista 没有更改,只是其内部的一部分值被修改了;

python 函数参数传递有以下2种类型:
  • 不可变类型:类似 Java 的值传递,函数获取的形参是实参的实际值拷贝;
  • 可变类型:类似 Java 的引用传递,函数获取的形参是实参的内存地址引用;

实际上 python 中一切都是对象,不是 Java 或 C++ 中严格的值传递和引用传递,只能说是传递了可变对象和不可变对象;

默认参数值
python 函数的入参可以设置默认参数值,如下:
 
def info(name, age=18):    # age 默认值为18
    print("name:", name)
    print("age:", age)
info("assad")

不定长参数
python 参数入参也支持不定长参数,在入参中使用 * 标记一个变量名,该形参会储存所有未命名的形参,并将其储存在一个元组中;
 
def print_info(info_id, *args):           # 其中 *params 用于接收可变长度入参
    print("id:", info_id, end=" -> ")
    for arg in args:
        print(arg, end=" ")
    print()
    return
print_info(2333, 1, 2, 3, 4, 5, 6, 7, 8)  # 输出:id:2333 -> 1 2 3 4 5 6 7 8 


变量作用域

python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的;

python 变量的作用域包括4种:
  • Local:局部作用域
  • Enclosing:闭包函数外的函数中
  • Global:全局作用域
  • Built-in:内建作用域
一个命名相同的变量,可以同时存在在这4个作用域中,python 代码执行时会按照,Local -> Enclosing ->Global ->Build-in 这样的顺序查找该变量;

局部变量和全局变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域;
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中;
 
var = 0        # var 在这里是全局变量
def foo():
    var = 20   # var 在这里是局部变量.
    print ("local var =  ", var)
    return
foo()
print("global var = ", var)
# 输出:
# local var = 20
# global var = 0

global 和 nonlocal关键字
当内部作用域想修改外部全局作用域的变量时,可以使用 global 将一个变量标记为全局变量:
 
var = 0
def foo():
    global var   # 将 var 标记为全局变量
    var = 20
    print("local var = ", var)
    return
foo()
print("global var = ", var)
# 输出:
# local var = 20
# global var = 20
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字:
 
def outer():
    var = 0
    def inner():
        nonlocal var    
        var = 20
        print("inner var = ", var)
    inner()
    print("outer var = ", var)
outer()
# 输出:
# inner var =  20
# outer var =  20


匿名函数

python 使用 lambda 来创建匿名函数,语法如下:
 
lambda <参数列表>: <返回表达式>
示例如下:
 
sum = lambda arg1, arg2: arg1 + arg2 
print(sum(20, 10))
print(sum(40, 50))


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值