目录
4.12、传参如果为不可变对象,利用全局变量可以改变外部不可变对象的值
4.14、采用复制的方法可以使传参为可变类型,但是不影响函数外部变量。
1、函数的好处
➢函数是重用的程序段,允许给一块语句一个名称
➢ 在程序的任何地方使用这个名称任意多次地运行这个语句块,此方 式被称为调用函数。
➢ 之前的示例已经使用了许多内建的函数,比如len和range
➢ 通过改变函数的参数,可以最大程度的复用代码
2、自定义函数
你可以定义一个函数,以下为简单的原则:
- 函数代码块要以def关键字开头,后面是函数名称和括号()
- 任何传入的参数和自变量必须放在括号内,圆括号之间可以用于定义参数。
- 函数的第一行语句可以用来选择性的使用文档字符串用于存放函数说明
- 函数内容以:开始,并且缩进
- return结束函数,选择性的返回一个值给调用方,不带return表达式的则返回None
2.1、语法
def 函数名(参数):
函数体
示例:
>>> def func(a,b):
... return a-b
...
>>> func(9,2)
7
>>>
问题:函数和方法的区别?
- 函数:在类外面(class)外部定义的可执行函数,都是函数
- 方法:在类内部,与类和实例有绑定关系的函数,都是方法
注意事项:
- 函数的名字最好不要和内置函数的名字一致,这样有可能在使用内置函数时,会出现一些错误。
3、函数的调用
定义完一个函数后,怎么调用该函数?请看下方的例子
#coding=utf-8
'''定义一个函数,该函数主要是用来打印一句话'''
def func(s):
return s
#调用该函数,直接输入函数名
func("i am a good boy")
结果为空:
============================== RESTART: E:\b.py ==============================
>>>
原因:这是因为在函数体内,没有输入print,则无法打印该函数,一共有2种改变方式,第一种为print写在函数体内,第二种为print写在调用函数的时候。
方法一:print写在函数体内
#coding=utf-8
'''定义一个函数,该函数主要是用来打印一句话'''
def func(s):
print(s)
return
func("i am a good boy")
方法2:print写在调用函数的时候:
#coding=utf-8
'''定义一个函数,该函数主要是用来打印一句话'''
def func(s):
return s
print(func("i am a good boy"))
结果:
============================== RESTART: E:\b.py ==============================
i am a good boy
>>>
3.1、函数体内输入print和return有什么区别?
- 首先函数体是允许没有返回值的,也就是函数体内没有return,这样做的结果就是该函数不能被后续的程序中使用。
- return只是返回值,如果想打印结果,还是必须得有print输出的,如果只有return,则仍然需要print,另外,函数体内如果有return语句则在后续程序中可以调用该返回值。
注意事项:
- 1个函数体内可以有多个return语句,但是只会执行第一个return语句。
- 当调用函数的时候,如果函数体内没有print,则在调用函数的时候,也需要输入print才能打印出来结果
- 在使用函数调用参数的时候,最好是判断一下参数的类型,判断类型只能使用isinstance
4、参数传递
4.1、可更改和不可更改类型
在python中,类型属于变量,变量是没有类型的。
- 不可变类型:字符串、元组、数字
- 可变类型:列表、字典、集合
python中函数的参数传递:
- 不可变类型:类似c++的值传递,如整数、字符串、元组、 func(a)传递的只是a的值,并没有影响a对象本身
- 可变类型:类似c++的引用传递,如列表、字典、 func(la)传递的是la这个对象,通过函数修改la后,同样la也是受影响的。
4.11、传递一个参数为不可变对象