Python、函数

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。
函数调用
函数接收参数,并且返回一个返回值(return value),当然有的函数并没有参数或者返回值。
函数的好处:
新建函数,可以为一组语句命名,成为一个代码块,有利于阅读代码,并且组织后的代码更易调试;
减少重复代码的使用,精简代码,修改方便快捷;
不用重复性的鞋代码。

函数的调用

>>> print('hello Python')         #print()打印显示的函数
hello Python
>>> type('zhagnsna')              #type()返回参数类型的函数
<class 'str'>                   
>>> int(e) 						  #int()将参数转化为整数的函数
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    int(e)
NameError: name 'e' is not defined

上述例子即为函数的调用,选用的都是Python的内置函数进行调用。

定义函数

自定义函数的规则:
函数代码块以def关键字开头,后跟函数标志符名称和圆括号()。
所有传入的参数和自变量都必须放入圆括号()内,可以在圆括号内定义参数。
函数的第一行语句可以选择性使用文档字符串,用于存放函数说明。
函数内用以冒号开始,并且要缩进。
return[表达式]结束函数,选择性返回一个值给调用方。不带表达式相当于返回None。

自定义函数语法格式:
def 函数名(参数列表):
函数体

或者:
def (arg1,arg2,…argN):

注意:
没有return语句时,函数执行完毕也会返回结果,不过结果为None;
return None可以简写成 return;
在Python中定义函数时,要保持函数体中同一层的代码缩进一致。

函数的参数

参数类型:

			**必须参数
			关键字参数
			默认参数
			可变参数
			组合参数**

必须参数:

很严谨,必须以正确的顺序传入函数。调用时数量必须和声明时一样。


>>> def p(var_str):
	print(f'the param is:{var_str}')
	print(f'我是一个传入参数,我的值是:{var_str}')

	
>>> p('hello,world')    #传入一个参数
the param is:hello,world
我是一个传入参数,我的值是:hello,world
>>> p('hello','world')  #传入两个参数,报错
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    p('hello','world')  #传入两个参数
TypeError: p() takes 1 positional argument but 2 were given

关键字参数:

关键字参数和函数调用关系紧密,函数调用使用关键字参数确定传入的参数值。
使用关键字参数允许调用函数是参数的顺序于声明不一致,因为Python解释器可以用参数名匹配参数值。
example

>>> def person_info(name,age):
	print(f'年龄:{age}')
	print(f'名字:{name}')
	return

>>> person_info('小萌',22)          #按参数顺序传入参数
年龄:22
名字:小萌
>>> person_info(age=22,name='小萌')#不按参数顺序,指定参数名传入
年龄:22
名字:小萌
>>> person_info(name='小萌',age=22)#按参数顺序并指定参数名传入
年龄:22
名字:小萌

默认参数

调用函数时,如果没有参数值传入就用默认参数,如果有新的参数值传入就替代默认参数值。
注意:
默认参数一定要放在非默认参数的后面;
无论有多少个默认参数,默认参数都不能在必须参数之前;
无论有多少个默认参数,若不传入默认参数值,则使用默认值;
若要更改一个参数位置不正第一位的默认参数值又不想改其他默认参数,则可以通过参数名进行更改;
若有一个默认参数通过传入参数名修改参数值,那么其他想要更改的默认参数也都需要传入参数名进行修改,否则报错;
更改默认参数时,传入默认参数的顺序不需要根据定义的函数中的默认参数的顺序传入,不过最好同时传入参数名,否则容易出现执行结果与预期不一致的情况。

>>> def a(name,age=23):
	print(f'我名字是:{name}')
	print(f'年龄:{age}')

	
>>> a('小萌')
我名字是:小萌
年龄:23
>>> a('小萌',18)
我名字是:小萌
年龄:18

可变参数

如果需要一个函数能够处理更多的声明函数,这些参数叫做可变参数。可变参数声明时不会命名。基本语法如下:
def functionname([formal_args,]*var_args_tuple):
“函数—文档字符串”
fucntion_sutie
return[expression]
加了 星号( * )的变量名会存放所有未命名的变量参数。如果变量参数在函数调用时没有指定参数,就是一个空元组。我们也可以不向可变函数传递未命名的变量。
example:

组合参数

定义参数可以用必须参数、关键字参数、默认参数、可变参数组合使用。注意定义参数的顺序必须是必须参数=》默认参数=》可变参数=》关键字参数

def power(*args):
    result=0
    for n in args:
        result=result+n*n
    return result

# 调用函数
tupleArray=(1,2,3)
# *tupleArray这种方式很常见,很重要
print(power(*tupleArray))        #结果14

listArray=[1,2,3]
# *listArray这种方式很常见,很重要
# *listArray表示把listArray这个list中所有元素作为可变参数传进去
print(power(*listArray))         #结果14


执行流程

程序执行总是从第一行代码开始,从上到下,从左到右,按顺序依次执行。
函数定义并不会改变程序的执行过程,不过函数代码块中的语句并不是立即执行,而是等函数调用时才被执行。
函数调用可以看作时程序执行流程中的一个迂回路径,遇到函数调用时,并不会直接执行下一条语句,而是跳到函数的第一行,继续执行完成函数代码块中所有语句,再跳回原来离开的地方。

形参和实参

在函数内部,会将实参的值赋给形参。
在函数中,函数名后面的参数列表就是实参,在函数体中就是形参。
在函数体内都是对形参进行操作,不能操作实参,即对实参做出更改。

变量作用域

局部变量

函数内部定义,只能在函数内部引用,作用域函数内,局部变量。

全局变量

在函数外,一段代码最开始赋值得变量可以被多个函数引用,这就是全局变量。全局变量可以在整个程序范围内访问。
要将全局变量变为局部变量,只需要在函数体内定义一个和局部变量名称一样得变量即可。
要将局部变量变为全局变量,只需要在局部变量前面加个关键字global即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值