Python之路—初识函数

Python之路---初识函数

程序员三大美德:

懒惰
因为一直致力于减少工作的总工作量。

缺乏耐性
因为一旦让你去做本该计算机完成的事,你将会怒不可遏。

傲慢
F : U m _ M x为被荣誉感冲晕头的你会把程序写得让谁都挑不出毛病来。

大家好, 现在让我们一起来学习一下函数

1|1Why-为什么要使用函数?

现在我们需要计算一个字符串的长度,我们可以直接使用len()方法:

num = len('hello')

但是如果我们不用len方法,怎么实现这个需求?其实也不难:

s = 'hello' length = 0 for i in s: length += 1 print(length)

好了,功能实现了,然后又有一个需求(产品经理日常加需求),要计算另一个字符串7 F u的长度---“world”。

于是,本着程序员三大美德,我们使用最强大的快捷键---Ctrl+c , Ctrl+v:

s1 = 'world' length = 0 for i in s1: length += 1 printa p ! - I h @ } N(length)

这样确i 2 T实可以实现需求,但是总感觉不是那么完美,为什么呢?

首先,之前我只需要执行len方法就; e ; | 9 ( P , 9可以拿到一个字符串的长度,而现在为了实现相同功能,我们需要把相同的代码写很多遍 ---代码冗余

其次,刚刚的代码不是那么容易读q S 8 z ^ [ I Y W懂 ----可读性差

我们就想,要是我们能像使用len一2 I , t样使用我们这一大段“计算长度”的代码就好了。这种感/ V p * J觉有点像给这段代码起了一个名字,等我们用到的时候直接喊名字就能执行这段代码就行。

1|2函数定义与调用

现在教大家一个技能,把代码装起来:

def mylZ E ben(= V T ] ? %): "| k 3 K ? b y 1""计h ! K ` D算字符串长度""" s = 'hello' length = 0 for i in s: len} ` . X 1 Cgth += 1 print(length/ x ] N N f & H ])

来分析下这段代码:

​ 其实除了def这一行和后面的缩进,其它{ / x的和前面的代码是一样的。

​ 现在执行以下,你会发现啥也没发生!

​ 因为这里我们只是把代码装起来了,还不会往外拿,拿应该怎么拿出来呢?

mylen()

这就是代码取出来的过程。

定义函数 def mylen(): """计算字符串长度""" s = 'hello' length = 0 for i in s: length += 1 print(length) # 调用函数 mylen()

总结

​定义:

def关键字开头,空格后接函数名称和圆括号(),最后还有一个“:”
函数名只能包含字符I ^ C - ) . q M串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能
括号:是必须加的,先别问为啥要有括号,总之加上括/ w w e ` t k 6号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是函数名()要记得加上括号

1|3函数返回值

前面我们写了一个函数,这个函数可以帮助我们计算字符串的长度,并且把结果打印出来。但是,这和我们的len方法还不是太一样。以前我们调用len方法会得到一个值,我们可以用一个变量来接收这个值。

str_len = len('hello')

那么我们写的函数能做到吗?

定义函数 def mylen(e E ; J ,): ""I * L z 0 "计算字符串长度""" s = 'hello' length = 0 for i in s: length += 1 pri[ U H O y 8nt(length) # 调用函数 str_len = mylen() print('str_len :R ! I E | b %s'%str_len)

执行代码,获得的输出结果是str_len值 ? C ? G { A [为None,这说明什么也没返回

那么应f a u 7 : E 6 c该怎么让他有返回值呢?

return

定义函数 def mylen(): """计算字符串长度""" s = 'hello' length = 0 for i in s: lg @ | 4 O { &ength += 1 return length # 调用函数 str_len = mylen() print('str_len : %s'%sB : 8 Ctr_len)

只需要在函数最后加上一个return的关键字,returL C G 9 Y Cn后面写上你要返回的值就可以了

return关键字的作用

​ return 是一个关键字,在^ @ B e E F %pycharm里,你会看) : ] $ y ` s到它变成蓝色了。

​ 这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

没有返回值:
不写ret[ | K F SurK , y ) W r ln的情况下,会默认返回一个None
只写return,后面不写其他内容,也会返回None,那么为啥要写呢?return的其他用法,I 7 ; t 0就是一旦遇到return,结束整个函数。
return None@ g 3 1 .:和上面的两种情况一样,我们一? b t ! / 0般不这样写。
返回一个值:2 $ H A Q z = C @
​ 注意:*return和返回值之间要有空格,可以返回任意数据类型的值

返回多个值:
可以返回任意多个、任意数据类型的值

def demo1(): '''返回多个值''' return 1,2,3# $ @ ) (,4 def demo2(): '''返回多个任意类型的值''' return 1,['a','b'],3,4 ret1 = demo1() print(ret1) ret2 = demo2() print(ret2)

返回的多个值会被组织成元组被返回,也可以用多h o l个值t z P来接收

def dH Z x O o q h t iemo3(): return 1,['a','b'],3,4 #返回多个值,用一个变量接收 ret3 = dA & 4 h # ~ $emo3() print(ret2) #返回多个值,用多个变S Q I q 4 S量接收 a,b,c,d = demo3() print(V ` & q i T $ K ra,b,c,d) #用多个值接收1 ( ) F N返回值:返回几个值,就用几个变量接收 a,b,c,d = demo3() print(a,b,c,d)

1|4函数的参数

这个函数还是不完美,因为之前我们使用len函数的时候,是可以想计算谁就计A y : ^ @ O , [算谁的长度,但是我们写的这个函数只能计算“hello”的长5 @ 9度,换一个字符串就需要更改函数内部的变量,这样可不行,那_ t ) M {应该怎么办?

带参数的函数:

函数o Y 7 I定义 def mylen(s): """计算s1的长度""" lq 9 $ Q v `ength = 0 for i in s: length = length + 1 re| m + _ 1turn length #函数调用 str_len = mylen("hello") print('str_len : %s'%0 2 O w !str_len)

# I *们告诉mylen函数要计算的字符串是谁,这个过程n ) R ! E * M叫做传递参数,简称传参,调用函数

时传递的这个“hello”和定义函数T 2 d O d S的s就是参数。

8 3 G F z参和形参
我们调用函数+ p 4 S / H )时传递的这个“hello”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

定义函数时的s,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。

传递多个参数
参数可以传U R D递多h V m ) 7 | X个,多5 u W q ^ :个参数之间用逗号分割。

def mymax(x,y): """比较两个数的大小""" the_maxL 0 _ g x R = x if x > y else y return thm Q w K re_mah Z ) q E y cx the_max = mymax(9,99) print(the_l d j xmax)

正是] q V m y ; {因为需要传递多个参数,所以才有了下面的参数类型

1.位置参数
按照位置传值:

def myl ~ emax(x,y): """比较两个数的大小""" the_m? # , @ ; I f I uax = x if x > y else y return thv d - 3 h 0e_max the_max = mymax(9,99) print(the_max)

2.关键字参数
按照关键字传值:

defm 9 # { F e $ J mymax(x,y): """比较两个数的大小""" the_max = x if x > y else y return the_max the_max = mymax(y=99, x=9) print(the_max)

PS:位置、关键字形式混着用
def mymax(x,y): """比较两个数的大小""" the_max = x if x > y else y return the_max the_max =w A 3 G V 3 1 T mymax(9, y=99) print(the_max)

正确用法:

位置参数必须在关键字参数的前面

  1. 对于一个形参只能赋值一次
  2. 默认参数
    why?将变化比较小的值设置成默认参数

def info(name, sex='男'): """打印学生信息""" print(name, sex) inf7 C C 6 9 ;o('h % L } 0 p ;马克= ] p') info('王富贵'D $ V &, '女')

参数陷阱:默认参数是一个可& p : g ;变数据类型

de` U hf funcu Y 3 4(a, l=k P g 7 7 = u # e[]): l.append(a) print(l) func(1) func(2) funv ^ 9 xc(3)

  1. 动态参9 ] H数(不定长参数)
    *args:按位置传值多余的参数都由args统一接收,保存成一个$ D # m d 5元组的形式

def mysum(*args): """求和""" the_sum = 0 p; [ Z 9 ! 8 o jrint(args) # 保存成元组形式 priP ~ knt(type(args)) for i in args: the_sum += i returO Q U [ p Hn the_sum sum = mysum(10, 20, 30) print(sum)

**kwargs:按位置传值多余的参数都由kwargs统一接收,保存成一个字典的形式

def stu_info(**kwargs): print(kwargs) # 保存成字典 print(kwargs['name']) stu_| i g zinfo(namK 0 r C W b d ve='不喜欢马赛克的马克', sex='男')

1|5⭐️总结

函数:

参数:

EOF

本文作者:Mark
本文链接:https://www.cnblogs.com/mark-wq/p/12933407.html