函数
1. 什么是函数
当我输入一定数据以后, 能根据里面的执行步骤, 算出另一些数据的值(return 值)
2, 在 python 中函数怎么定义
- def function(x,y,z):
- #---- 文档字符串 ------ 告诉别人这个函数时干什么用的, 能够实现什么功能
代码块(函数体)
return 返回值
- def add(a,b):
- #两个数相加的和
- c = a + b
- return c
- print(add(1,2)) #3 函数打印
- # 第二种方式: 通过变量接收
- d = add(6,8)
- print(c)
?return 总结:
1函数里面 return 表示函数的返回值, 可以在函数调用之后通过变量进行接收
2函数体遇到 return 就终止运行(也就是 return 后面的语句是不会执行的), 相当于 for ,while 的 break
3函数的输出结果是由 return 决定的!!!
例: 下面是 return 在 if 里面, 不执行 if 语句, 是不会执行 return 语句.(也就是前面虽然有 return, 但是条件是在 else 里面满足, 返回的是最后的 return)
- def add(a,b):
- if a> 100:
- return a + b
- elif a == 100:
- return a + 2*b
- else:
- return a + 3*b
- print(add(6,8))
例. return 终止函数, 就不会执行第二个 return
- def add(a,b):
- if a> 100:
- return a + b#return 终止函数, 后面就不会执行, 省去 else, 是一种编程思维
- return a + b*3
- print(add(111,2))
例: 函数调用以后得到的数据是由 return 决定的.
函数没有 return, 得到的数据就是 None
- def add(a,b):
- c = a + b
- print(add(1,2))# 结果是 none
没有 return 值, 调用函数操作会报错
- def add(a,b):
- c = a + b
- print(c)# 这里只是打印
- print(add(1,2) +3) #TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
- # 自己定义一个有返回值的 append 函数
- def append(origin_list,element):
- origin_list.append(element)
- return origin_list
- print(append(['python'],'popo'))
- # 结果['python', 'popo']
append 函数没有返回值即没有 return, 在调用, 例如 print(mylist.append('java'))时返回的是 None
- my_list = ['hello','python']
- a = my_list.append('java')
- print(a)#None
- # 自己定义一个有返回值的 append 函数
- def append(origin_list,element):
- """对列表进行数据添加"""
- origin_list.append(element)
- return origin_list
- print(append(['python'],'popo'))
- # 结果['python', 'popo']
?print 和 return 的区别
print: 显示, 在屏幕上打印出来
return : 函数运算的结果, 获取结果以后不一定会打印显示出来
注: 没有定义的函数, 无法调用.
3. 函数的参数
1. 形参和实参
形参: 函数在定义的时候写的参数. 变量名
实参: 函数在调用的时候写的参数. 他是个值
函数从调用的角度来说, 分为形式参数和实际 参数. 形参是指函数创建和定义过程中小括号里的参数; 而实参指得是函数在被调用过程中传递进来的参数. 如下所示
- >>> def MyFirstFunction(name):
- '函数定义过程中的 name 是叫形参'
- #因为 Ta 只是一个形式, 表示占据一个参数位置
- print('传递进来的' + name + '叫做实参, 因为 Ta 是具体的参数值!')
- >>> MyFirstFunction('小')
传递进来的小叫做实参, 因为 Ta 是具体的参数值!
2位置参数 positional argument
形式参数和实际参数 (实参) 要疑义按照顺序对应.!!!!! 也就是形参, 实参的个数, 顺序都要一一对应上.
多了少了都不行, 位置顺序不一样, 结果有可能也会发生错误.
- def append(origin_list,element):
- origin_list.append(element)
- return origin_list
- print(append('popo',['python']))
- #
- origin_list.append(element)
- AttributeError: 'str' object has no attribute 'append'
位置参数, 实参的位置不对, 传入的字符串'popo'是不可以进行 append()的方法的. 属性错误 AttributeError
3. 函数文档(.__doc__)
给函数写文档是为了让别人可以更好的理解你的函数, 所以这是一个好习惯. 函数文档的作用是描述该函数的功能.
- >>> def MyFirstFunction(name):
- '函数定义过程中的 name 是叫形参'
- # 因为 Ta 只是一个形式, 表示占据一个参数位置
- print('传递进来的' + name + '叫做实参, 因为 Ta 是具体的参数值!')
- >>> MyFirstFunction.__doc__ #MyFirstFunction 没有()
- '函数定义过程中的 name 是叫形参'
- >>>
我们发现, 在函数开头写下的字符串是不会打印出来的, 但它作为函数的一部分存储起来. 这个称为函数文档字符串, 它的功能跟注释一样.
与注释不同的是, 函数文档字符串可以通过特殊属性 ._ _doc_ _(注:._ _doc_ _两边分别是两条下划线):
也可以使用 help()函数查看函数的文档
函数文档写在一个字符串里面, 写 2 个, 只会打印出第一个, 第二个不会打印打出, 例如:
- >>> def MyFirstFunction(name,age):
- '这是一个函数文档'
- '用来记录函数的使用记录'
- print('班长:'+ name +', 年龄:' + age)
- >>> MyFirstFunction.__doc__
- '这是一个函数文档'
- >>>
4. 默认参数
默认参数就是在函数定义的时候, 给形参赋予了默认值的参数:
- >>> def saySome(name="python",words="让编程改变世界!"):
- print(name + '->' +words)
- >>> saySome() #调用函数时没有参数, 就会去找默认参数
python->让编程改变世界!
>>> saySome("java","也可以改变世界") #重新赋予实参, 会调用函数时会调用实参, 不会调用默认的参数
java->也可以改变世界
默认参数总结:
如果有默认值, 在函数调用的时候, 如果位置参数是一一对应的, 传入了实际参数, 默认参数不会生效.
如果没有传入实际参数, 默认值生效.
1)默认值生效的情况:
- # 默认参数, 但是没有传入实际参数, 默认值生效
- def append(origin_list,element='cc'):
- origin_list.append(element)
- return origin_list
- print(append(['python'])) #结果:['python', 'cc']
2)默认值不生效的情况
- def append(origin_list,element='cc'):
- origin_list.append(element)
- return origin_list
- print(append(['python'],'java')) #结果:['python', 'java']
3. 关键字参数
普通的参数叫做位置参数, 使用位置参数可以解决程序员在调用一个函数时候, 搞乱位置参数的顺序, 以至于函数无法按照预期实现的潜在问题.
- >>> def saySome(name,words):
- print(name + "->" +words)
- >>> saySomething("python","让编程改变世界!")
python->让编程改变世界!
>>> saySome("让编程改变世界!","python")
让编程改变世界!->python
- '为了不让调用的参数位置弄混, 加上关键字参数, 就不会出错了'
- >>> saySome(words="让编程改变世界!",name="python")
python->让编程改变世界!
关键字参数其实就是在传入实参时指定形参的变量名, 在调用函数的时候使用的!
Python 基础语法 第 6 节课(函数的定义, 函数的参数)
来源: http://www.bubuko.com/infodetail-3529625.html