我的python之路v1.3_我的Python升级打怪之路【三】:Python函数

函数

在函数之前,我们一直遵循者:面向过程编程,即:根据业务逻辑从上到下实现功能,开发过程中最常见的就是粘贴复制。代码就没有重复利用率。

例如:有好多的重复的代码

1 if条件:2 发送指令3 接收结果4 elif条件:5 发送指令6 接收结果7 elif条件:8 发送指令9 接收结果

如果我们将重复的代码提取出来

例如:代码简洁多了

1 def一条操作(参数):2 发送指令3 接收结果4

5 if条件:6 一条操作7 elif条件:8 一条操作9 elif条件:10 一条操作

对于以上两种方式,第二种明显要优于第一种,重用性可读性大大增加。这就是函数式编程和面向过程编程的区别

函数式:将某功能代码封装到函数中,日后便无需重复编写,仅仅调用函数即可。

面向对象:对函数进行分类和封装。

函数式编程最重要的是增强代码的重用性和可读性

1.函数的定义和使用

1.定义:

1 def函数名(参数):2

3 函数体4

5 返回值(默认不写,返回值为空)

函数的定义要点:

def:定义函数的关键字

函数名:之后会根据函数名对函数进行调用

函数体:函数中进行一系列的逻辑计算

参数:为函数提供数据

返回值:当函数执行完毕后,用于给调用者返回数据,默认为空

2.参数:

为什么要有参数呢?

1 def操作(参数):2 发送一条指令('ls')3

4 if条件:5 操作()6 elif条件:7 操作()8

9 #不管是if还是elif,发送的都是同一条指令ls

无参数例子

1 def函数(参数):2 执行指令(参数)3

4 if条件:5 函数(ls)6 elif条件:7 函数(pwd)

有参数的例子

函数中有三种不同的参数:

普通参数

默认参数

动态参数

1 #************定义****************

2 #name 叫做函数func的形式参数,简称:形参

3 deffunc(name):4 print(name)5

6 #************调用****************

7 #'nullnull'叫做func的实际参数,简称:实参

8 func('nullnull')

普通参数

1 def func(name,age=20)2 print(name,age)3

4 #指定参数

5 func('nullnull',18)6 func(name="nullnull",age=20)7

8 #使用默认参数

9 func("null")

默认参数

1 def func(*args):2 print(args)3

4 #执行方式一

5 func(1,2,3,4,5,6,7)6

7 #执行方式二

8 li = [1,2,3,4,5,6,7]9 func(*li)

动态参数args

1 def func(**kwargs):2 print(kwargs)3

4 #执行方式一

5 func(name="nullnull",age=18)6

7 #执行方式二

8 dic = {'name':'nullnull','age':18}9 func(**dic)

动态参数kwargs

特别的,普通参数,默认参数,动态参数是有顺序要求的

1 def func(普通参数,默认参数,*args,**kwargs):2 pass

参数的顺序要求

Python的内置函数

Lambda表达式

对于简单的函数,有一种简便的表示方式,即:lambda表达式

1 #*************普通函数**************

2 #定义函数

3 deffunc(arg):4 print(arg)5

6 #执行函数

7 func('null')8

9

10 #*************lambda***************

11 #定义函数(lambda表达式)

12 my_lambda = lambda arg : arg + 1

13

14 #执行函数

15 my_lambda(0)

递归

利用Python编写斐波那契数列:

斐波那契数列:0,1,1,2,3,5,8,13......

1 deffunc(arg1,arg2):2 if arg1 ==0:3 print(arg1,arg2)4 arg3 = arg1 +arg25 print(arg3)6 func(arg2,arg3)7

8 func(0,1)

补充:三元运算符

三元运算(三目运算),是对简单的条件语句的缩写

1 result = 值1 if 条件 else值22

3 #如果条件成立,那么result = 值1,否则result = 值2

补充:深浅拷贝

对于数字 字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

1 importcopy2

3 n1 = 1

4

5 #查看n的内存地址

6 print(id(n1))7

8 #将n1赋值给n2

9 n2 =n110 print(id(n2))11

12 #浅拷贝

13 n3 =copy.copy(n1)14 print(id(n3))15

16 #深拷贝

17 n4 =copy.deepcopy(n1)18 print(id(n4))

你会神奇的发现打印的都是相同的

对于字典、元组、列表 而言,进行赋值、浅拷贝、深拷贝时,其内存地址的变化时不一样的

1.赋值

1 n1 = {"k1":'nullnull',"k2":1,"k3":['hello','python']}2

3 n2 = n1

2.浅拷贝

浅拷贝,在内存中额外创建 第一层 的数据

1 importcopy2

3 n1 = {"k1":"nullnull","k2":1,"k3":["hello","python"]}4

5 n2 = copy.copy(n1)

3.深拷贝

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:Python内部对字符串和数字的优化)

1 importcopy2

3 n1 = {"k1":"nullnull","k2":1,"k3":["hello","python"]}4

5 n2 = copy.deepcopy(n1)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值