python-函数
函数:
意义:复用代码,用在需要重复调用的地方。
1 | def somefunction(someargs): |
1.大部分情况下函数是为了返回一个值的,用return
来返回,当然也可以什么都不返回(没有return)。
2.函数传参需要写一些参数到括号中,当然也可以不传参,那么括号中不写参数。
命名规则
全部采用小写,有多个单词时,用下划线连接。私有函数,可以使用下划线开头。
参数修改:
传参之后对参数(传进来的变量)的修改:python中没法通过赋值这种方式来修改参数,只能通过修改参数对象本身的方式。(涉及参数作用域)
函数内部的作用域与函数外部的作用域不同,内部的作用域对函数外部没有影响,前提是不修改值。
如果只是对变量重新赋值,那么是相同值的不同引用,但是如果修改了值,那么函数外部的值也会变化。
如果参数本身不可修改,那么修改参数的方法:将参数变为可变的,比如放入列表中
1 | def change_value(x): |
位置参数,关键字参数
参数分为位置参数和关键字参数,上面的都是位置参数。
关键字参数:使用名称指定的参数
关键字参数的优点:可以设置默认值,所以调用函数可以不传入参数(不会报错),或者传入部分参数都是可以的。
1 | def total(num1=0,num2=0): |
收集参数
如果传入参数个数不定,将不定个参数放入元组(参数前面加一个星号)
1 | def sum(*num): |
星号之前的所有位置参数会放入元组,之后的即使是位置参数,也会被作为关键字参数。
1 | #这个如果没有给出className会报错 |
如果要将关键字参数也放入元组,那么加两个星号
1 | def courclass(**studentname,classname='xiaofendui'): |
分解参数
前面写的是函数如何接受不确定个数的参数,但是如果传进来的参数是一个数组或者字典呢?同样也可以在传入参数中分解参数
1 | a=(1,2) |
一个星号可以分解数组,两个星号可以分解字典
作用域
namespace调用每一个函数时都会创建一个局部命名空间,只要不修改传入变量的值,函数外部的变量不会变。
函数中可以调用全局变量,但是普通的直接调用容易引起问题,比如函数中存在同名参数或变量。所以需要global访问全局变量。
1 | import datetime as dt |
函数内部改变外部变量的方法除了前面说的改变值本身之外,还可以显式的引用全局变量
1 | x=2 |
闭包
1.嵌套在函数中的内部函数。
2.外部作用域的变量可被内部函数使用
3.修改外部作用域变量使用nonlocal
1 | def mult(a): |