python进阶第1篇 函数入门

知识内容:

1.函数的作用

2.函数的定义与调用

3.函数的返回值

4.函数的参数

一、函数的作用

1.复用代码

将可能重复执行的代码封装成函数,并在需要执行的地方调用函数,不仅可以实现代码的复用,还可以保持代码的一致性,便于日后的维护

2.提高可读性

使用函数可以提高代码的可读性,便于后期的代码维护,同时也有利于软件测试的进行

二、函数的定义与调用

1. 函数的定义

(1)函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

(2)在python中定义函数的语法如下:

1 def 函数名(参数):
2     # 注释
3     函数体

在python中使用def关键字定义函数,然后是一个空格和函数名称,接下来是一对圆括号,在圆括号中是函数的参数,也就是形式参数列表,

多个参数用逗号隔开,圆括号之后是冒号,然后换行,最后是注释和函数体代码

(3)定义函数注意:

函数形参不需要声明变量,也不需要指定函数返回类型;即使函数不需要接受任何参数,也必须保留一对空的圆括号;括号后的冒号不能少;函数体相对于def关键字必须保证一个缩进(4个空格1个tab)

(4)函数名:

函数名:函数名是包含字母,数字,下划线的任意组合,但是不能以数字开头。虽然函数名可以随便取名,但是一般尽量定义成可以表示函数功能的,另外建议函数名不要以大写开头,一般类名以大写开头,函数名命名法则建议使用下划线连接法

函数名示例:  show_result()  input_numbers()

2.函数调用

1 返回值=函数名(参数1,参数2)
2 函数名(参数1,参数2)

示例:

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 定义一个函数输出费波纳西数列小于1000的项
 4
 5
 6 # 定义函数:
 7 def fib(n):
 8     a, b = 1, 1
 9     while a < n:
10         print(a, end=‘ ‘)
11         a, b = b, a+b
12     print()
13
14
15 # 调用函数
16 fib(1000)
17
18 函数定义于函数调用

函数定义与函数调用

三、函数的返回值

1.return的作用

return的作用: 结束一个函数的执行并返回,同时还可可以通过return返回一个任意类型的值

2.return返回的值

return返回的值可以是任何数据类型,字符串、列表、字典、数字、自定义类型等都可以,可以有一个或多个返回值,也可以没有返回值

函数中没有return语句或没有执行到return语句而返回或执行了不带任何值得return语句,则函数默认返回空值None

示例:

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 函数有一个或多个返回值
 4
 5
 6 def f():
 7     a = 1
 8     b = 2
 9     c = 3
10     print("函数有一个或多个返回值")
11     # return a                      # 一个返回值
12     return a, b, c                  # 多个返回值,以元组的方式返回
13
14
15 print(f())

函数有一个或多个返回值

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # return的作用
 4
 5
 6 def f():
 7     print(123434)
 8     # return 1        # 结束函数的执行
 9     print(23234)
10
11
12 f()

return的作用

四、函数的参数

1.实参和形参

(1)形参:  函数定义时圆括号内是使用逗号分开的形参列表,即函数定义的圆括号中的为形参,只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参

(2)实参:  函数调用时圆括号内是使用逗号分开的实参列表,即函数调用的圆括号中的为实参,实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值

注:

(1)在大部分情况下修改形参的值不改变对应的形参值

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 形参与实参
 4
 5
 6 def f(a):               # a为形参
 7     print("a is", a)
 8     a += 1
 9     print("a is", a)
10
11
12 n = 3
13 f(n)                    # n为实参
14 print("n is", n)
15 # 从结果可以看出在此程序中函数内部修改了形参的值,但是
16 # 对应的实参并没有发生改变

形参与实参

(2)但是在有些情况下可以通过特殊的方式在函数内部修改实参的值,如果传递给函数的是python可变序列,比如说列表、字符串,并且在函数内部使用下标或其他方法使可变序列增加、删除元素或修改元素值时,修改后的结果是可以反映到函数之外让实参发生修改

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 形参修改实参值(利用python可变序列)
 4
 5
 6 def modify(v, item):
 7     v[0] = v[0] + 1     # 修改列表元素值
 8     v.append(item)      # 为列表元素增加值
 9
10
11 def modify2(d):
12     d[‘age‘] = 18
13
14
15 # 修改列表:
16 a = [1, 3, 6, 9]
17 print(a)
18 modify(a, 666)
19 print(a)
20
21 # 修改字典:
22 d = {‘name‘: ‘wyb‘, ‘age‘: 21}
23 print(d)
24 modify2(d)
25 print(d)

形参修改实参值(利用python可变序列)

2.多个参数的传递

可以传递多个参数,多个参数之间用逗号隔开

在传参的角度上,调用函数时传参数有两种方式:  

(1)按照位置传参数

(2)按照关键字传参数

用法:1.位置参数必须在关键字参数的前面

   2.对于一个参数只能赋值一次

示例:

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 传递多个参数,实现比大小的功能
 4
 5
 6 def cal_max(a, b):   # 位置参数:按顺序定义参数
 7     if a > b:
 8         return a
 9     else:
10         return b
11
12
13 # 1.按照位置传参:
14 print(cal_max(20, 30))
15 print(cal_max(10, 20))
16 # 2.按照关键字传参:
17 print(cal_max(b=50, a=30))
18 # 3.位置和关键字传参混搭:
19 print(cal_max(10, b=30))

多个参数的传递

3.默认参数

python支持默认参数,即在定义函数时为形参设置默认值。在调用带有默认值参数的函数时,可以不用为设置了默认值的参数进行传值,此时函数将直接使用函数定义时设置的默认值进行传值。默认参数与下面的可变长参数均可以实现类似于函数重载的目的。

1 # 默认参数的使用:
2 def 函数名(...,形参名=默认值):
3     函数体

调用带有默认参数的函数时,可以不对默认参数进行赋值,也可以通过显式赋值来替换其默认值,具有极大的灵活性

1 # 默认参数实例:
2
3
4 def cal_sum(x, y=10):
5     return x + y
6
7
8 print("return of the sum(2, 3) is", cal_sum(2, 3))
9 print("return of the sum(3) is", cal_sum(3))

默认参数实例

注: 参数里既有默认参数也有普通参数时应该把普通参数放在默认参数左边,也就是说默认参数必须出现在函数形参列表的最右端且任何一个

默认参数右边都不能出现非默认参数(普通参数)

如下图所示:

4.关键参数

关键参数主要是指调用函数时的参数传递方式,而与函数定义无关。通过关键参数可以按参数名字传递值,实参顺序可以和形参顺序不一致,但不影响参数值的传递过程,避免了用户需要牢记参数位置和顺序的麻烦,使得函数调用和参数传递更方便。

注: 关键参数即为上面多个参数的传递中的按照关键字传递

 1 # __author__ = "wyb"
 2 # date: 2018/3/21
 3 # 关键参数示例
 4
 5
 6 def demo(a, b, c=5):
 7     print(a, b, c)
 8
 9
10 demo(3, 4, 2)           # 输出: 3 4 2
11 demo(c=1, b=2, a=6)     # 输出: 6 2 1 

关键参数示例

5.可变长参数(*args和**kwargs)

可变长参数,也有人称之为动态参数,分别由*args和*kwargs接收参数,前者接收任意多个实参并将其放在一个元组中,后者接受类似于关键参数一样显式赋值形式的多个实参并将其放入字典中

 1 # 元组可变长参数: 用*来标记
 2 def show_message(message, *args):
 3     for name in args:
 4         print(message, name)
 5
 6
 7 # 字典可变长参数: 用**标记
 8 def check_book(**kwargs):
 9     price = kwargs.get(‘Price‘, 0)
10     if price > 100:
11         print("**********The book is expensive!**********")
12     print("The book information are as follow: ")
13     for key in kwargs.keys():
14         print(key, ": ", kwargs[key])
15     print()
16
17
18 show_message("Good morning!", ‘Jack‘, ‘Tom‘, ‘Alex‘)
19 check_book(author=‘James‘, Title=‘Economics‘, Price=87)
20 check_book(author=‘Jack‘, Title=‘Frans‘, Price=120, Date=‘2012-3-2‘)
21 check_book(Date=‘2003-8-9‘, author=‘Linda‘, Title=‘Chinese‘, Price=107)
22 check_book(author=‘Jin Lady‘, Title=‘English‘, Price=65)
23 check_book(author=‘Woz‘, Title=‘Python‘, Price=70)
24 check_book(author=‘clear‘, Title=‘Ruby‘, Date=‘2009-8-1‘)

可变长参数示例

上述代码中第一个函数中的参数为第一种可变长参数的用法,即无论调用该函数时传递了多少实参,都将其放入元组中;

第二个函数值的参数则为第二种可变长参数的用法,即在调用该函数时自动将接受的参数转换成字典。

原文地址:https://www.cnblogs.com/wyb666/p/8577274.html

时间: 2024-08-12 11:12:35

python进阶第1篇 函数入门的相关文章

Python系列课程——人工智能篇简单入门

1.基础篇--基于Python的机器学习>>>>>>戳我,立即学习     现在大热.为未来计算机科学发展方向的机器学习了解多少呢? 下面推荐的这个内容比较适合小白,如果数学.模型理论基础不扎实也没关系,可以掌握Python编程语言基本可以轻松学习~ 例如利用Python编程语言实现线性分类器.支持向量机.朴素贝叶斯等经典机器学习模型来解决诸如肿瘤良恶性预测.手写体识别.泰坦尼克号生还预测等实际问题.并就模型本身泛化力问题(过拟合.欠拟合)进行讨论与实验,可以更快的解决

Python进阶【第一篇】socket

1.socket()模块函数 要使用socket.socket()函数来创建套接字.其语法如下: socket.socket(socket_family,socket_type,protocol=0) socket_family可以是如下参数: socket.AF_INET IPv4(默认) socket.AF_INET6 IPv6 socket.AF_UNIX 只能够用于单一的Unix系统进程间通信 socket_type可以是如下参数: socket.SOCK_STREAM 流式socket

Python进阶【第二篇】多线程、消息队列queue

1.Python多线程.多进程 目的提高并发 1.一个应用程序,可以有多进程和多线程 2.默认:单进程,单线程 3.单进程,多线程 IO操作,不占用CPU python的多线程:IO操作,多线程提供并发 计算性操作 多进程提高并发 4.GIL,全局解释器锁 总结: 多进程,多线程,提供并发 IO密集型:多线程 计算密集型:多进程 2.threading模块 threading模块对象 描述 Thread 表示一个线程的执行的对象 Lock 锁原语对象 RLock 可重入锁对象.使单线程可以再次获

深入理解javascript函数进阶系列第二篇——函数柯里化

前面的话 函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名.本文将详细介绍函数柯里化(curring) 定义 currying又称部分求值.一个currying的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来.待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值 从

Python进阶【第一篇】:Python简介

Python简介 1.Python的由来 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 2.C 和 Python.Java.C#等语言的联系与区别 机器码是指计算机能识别的语言--0/1,编程语言==>字节码==>机器码 其他语言: 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行 Python 和 C Python这门语言是由C开发而来. C语言是可以用来编写操作系统

Python进阶【第九篇】装饰器

什么是装饰器 装饰器本身就是函数,并且为其他函数添加附加功能 装饰器的原则:1.不修改被装饰对象的源代码  2.不修改被装饰对象的调用方式装饰器=高阶函数+函数嵌套+闭包 # res=timmer(test)  #返回的是wrapper的地址 # res()  #执行的是wrapper() # test=timmer(test)  #返回的是wrapper的地址 # test()  #执行的是wrapper() #  @timmer  就相当于 test=timmer(test) # #搭一个高

python基础知识第九篇(函数)

函数 >>>>>>>>>>> : 使用函数的好处 1.代码重用 2.保持一致性,方便维护 3.可扩展性 定义方法 def test01(): age="sasa,sdda" print(age) return(age) #形参,不调用时不占内存,必须一一对应,缺一不行,多一也不行#实参,定义实际的值,这叫位置参数,一个参数不能传两个值,也可以s=test(x=1,z=2,y=3), def test(x, y, z):

python进阶日记(lambda函数)

list1 = [{'a':1,'b':2},{'a':2,'b':4},{'a':3,'b':5}] #lambda 参数1,参数2 :返回值表达式 print(max(list1,key=lambda x:x['a'])) #max 中key 就相当于sort中的cmp,传入一个参数设置了排序方法 map操作,对函数进行遍历 list1 = [1,2,4,142,532,6,5,23,12] result = map(lambda x:0 if x%2==0 else 1,list1) pr

Python学习(二):入门篇:python中流程控制与函数编写

python中流程控制与函数编写 Last Eidt 2014/5/2 转载请注明出处http://blog.csdn.net/jxlijunhao 一,流程控制 1)布尔逻辑 Python中利用True来表示逻辑真,False来逻辑假 not :非 and:与 or   :或 ==  :逻辑等 >>> False==True False >>> False==False True >>> not False True >>> Fal