金丹期前期:1.5、python语言-python中的函数

一、Python中最简单的函数介绍

1、定义格式

def 函数名():
    代码

 关键词:def关键字、冒号、代码缩进行表示属于该函数界内

2、调用方法

函数名()

关键词:不缩进,直接函数名即可调用 

3、文档说明

def 函数名():
    "该区域是对该函数的说明"
    代码

 函数的说明文档调用方式:help(函数名)就会打印出上一段文字来简单介绍该函数。

二、函数的三大要素之函数参数

1、形参逐个列出,实参逐个按序传入实数

函数定义:

def sum(a, b):
    c = a+b
    print c

函数调用:

print(sum(1,2))

2、形参逐个列出,实参用形参名传入实数

#! /usr/bin/python3

def sum(a,b):
        c = a+b
        return c

print(sum(a=2,b=3))
print(sum(b=2,a=1))
#print(sum(a=2,3))  #error
#print(sum(b=3,1))  #error

 关键词:这种情况下可以乱序,但是即使按顺序时候也要带上全部形参名

3、形参逐个后面含有默认值,实参个数可能少于形参,传入实数

print(sum(1,3))
print(sum(2))
print(sum(a=2))
print(sum(a=2,b=3))
print(sum(b=3,a=1))
#print(sum(3,a=1)) #error

关键词:定义阶段有默认值的参数务必放在后面,调用阶段有默认值的实参可以不传

4、形参不定长,实参个数可以调用时候决定,传入实数

#! /usr/bin/python3


def fun(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print("kwargs: ")
    for key, value in kwargs.items():
        print(key, value)


c=(3,4,5)
d={'m':6,'n':7}
#fun() #error
#fun(1)#error
fun(1,2)
print('============')
fun(1,2,3)
print('============')
fun(1,2,m=3,n=4)
print('============')
fun(1,2,3,m=4,n=5)
print('============')
#fun(1,2,a=3,b=4,m=5,n=6)#error
#fun(a=1,b=2,3,4,m=5,n=6)#error
fun(1,2,*c,**d)
fun(1,1,c,d)

运行结果:

1
2
()
kwargs: 
============
1
2
(3,)
kwargs: 
============
1
2
()
kwargs: 
n 4
m 3
============
1
2
(3,)
kwargs: 
n 5
m 4
============
1
2
(3, 4, 5)
kwargs: 
n 7
m 6
1
1
((3, 4, 5), {'n': 7, 'm': 6})
kwargs: 

关键词:至少要包含普通的实参,而且不可乱序(带形参,带默认值)。可以没有元组或者字典参数。元组和字典有两种形式实参。注意倒数两次调用的区别,实参要使用* 和** 不然出现逻辑错误

5、引用传参,实参为变量(类比C/C++中的地址传递和值传递)

直接上结论:

  • 对于可变类型:使用函数内使用+=的情况下,实参的之会被改变。
  • 对于不可变类型:实参的值无论如何也不会改变。

关键词1:a = a+a与 a+=a的区别,尤其是该语句放在函数内部时候。

关键词2:a = 可变类型b与a=不可变类型b的区别:后期b改变时候a变不变,前者变,后者不变

关键词3:可变类型:列表,字典;

                不可变类型:数值类型,字符串,元组

参考:https://www.cnblogs.com/wxcx/p/12547997.html

三、函数三大要素之返回值

1、返回一个值

def sum(a, b):
    return a+b

2、可返回多个值

def divid(a, b):
    shang = a//b
    yushu = a%b 
    return shang, yushu

sh, yu = divid(5, 2)

 关键词:本质是用了元组

四、函数三大要素之局部变量及其与全局变量的关系

1、局部变量

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

2、全局变量与局部变量

变量定义在函数外,既能在一个函数中使用,也能在其他的函数中使用,这样的变量是全局变量

  • 函数内局部变量和全局变量重名,是局部变量起效
  • 想在函数内修改不可变类型的全局变量,使用关键字local,不然函数报错无法将全局变量指向新的数据(可变类型的全局变量在函数内修改不用使用local)
  • 可变类型的局部变量和全局变量同名时候需特别注意!!

可参考:https://blog.csdn.net/bigxuyang/article/details/77877935?utm_source=blogxgwz4,可在它基础上继续实验test2 = [1,2] def F(a): a = a+a print(a) F(test2) print(test2),进一步理解!!

五、特殊类型的函数之递归函数

  • 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
  • 要防止锁死,无法结束

六、特殊类型的函数之匿名函数

用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

1、匿名函数的定义语法:

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

2.匿名函数的使用场合

  • 作为参数传递
  • 作为简单的计算

参考:https://blog.csdn.net/u012308586/article/details/105063731,一般不建议太多使用匿名函数

七、总结可变类型和不可变类型的区别

  1. 全局与局部变量时候的不同:关键词local需不需要的区别
  2. 平常相互等号赋值之后,其中一个改变,两者行为的区别。
  3. 可变参数 a+=a 与 a = a +a的区别,放在函数内尤其明显。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值