python函数精讲讲(1)

函数简介

【print()】输出函数,【str()】等类型转换函数等等。这些其实都是Python的内置函数,也就是Python语言本身就提供的。
比如:当你饿了的时候,喊了一嗓子:"妈,我饿了,给我做个饭吧!"这就是非常典型的「函数的调用」。妈妈是提供了做饭的函数,而我们调用了这个函数。而做饭的这个函数其实就是一系列加油盐,翻炒动作的封装。

函数的定义

语法:

def func(形参,形参,形参...):
	代码块

含义:def为声明函数的关键字,然后空格 + 函数名 + 英文冒号;之后换行 + 缩进,然后编写代码
函数名的定义与标识符相同,可参考:
https://blog.csdn.net/xdc1812547560/article/details/107193496
例子:

def cook():
	print('妈妈正在做饭!')

函数的使用

函数的调用

语法:

调用函数

函数调用方法:函数名()

 def cook():
     print('妈妈正在做饭!')
cook()
妈妈正在做饭!

含义:声明了函数cook,通过cook()调用函数,在终端输出妈妈正在做饭!

函数传参

语法:

def func(形参):
	代码块

调用函数:

func(实参)

含义:声明函数时,在括号中定义需要传入的参数,调用函数时就必须传入参数

例子:

def cook(food):
    print('妈妈正在做' + food)
     
 cook('火锅')
妈妈正在做火锅

声明函数cook时在括号中定义了一个参数food,在通过函数名调用该函数时就必须传入一个参数cook(‘火锅’)

位置参数

例子:
声明函数,需要传入三个参数

def func(name, age, gender):
	print('名字:', name)
	print('年龄:', age)
	print('性别:', gender)

调用函数

func('张三', '20', '男')
名字: 张三
年龄: 20
性别: 男

含义:调用函数时传入三个参数,根据参数的顺序依次传入:name–‘张三’、age–‘20’、gender–‘男’

参数位置混乱例子:

声明函数,需要传入三个参数

def func(name, age, gender):
	print('名字:', name)
    print('年龄:', age)
    print('性别:', gender)   

调用函数

func('20', '男', '张三')
名字: 20
年龄: 男
性别: 张三

可以看到,位置传参时必须对应好参数的位置,否则就会出错

关键字参数

语法:func(参数1=‘值1’, 参数2=‘值2’)

例子:
声明函数,需要传入三个参数

def func(name, age, gender):
	print('名字:', name)
	print('年龄:', age)
	print('性别:', gender)

调用函数

func(age='20', gender='男', name='张三')
名字: 张三
年龄: 20
性别: 男

含义:为每个参数指定传入的值,不用去管参数的位置

默认参数

调用函数时未按要求传入参数程序会报错:

声明函数,需要传入三个参数

def func(name, age, gender):
	print('名字:', name)
	print('年龄:', age)
	print('性别:', gender)

调用函数

 func(name='张三', age='20')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-d26d9c8520b8> in <module>
----> 1 func(name='张三', age='20')
TypeError: func() missing 1 required positional argument: 'gender'
报错翻译为:TypeError: 缺少1个必需的位置参数:'gender'

设置默认参数语法:

def func(name, age, gender='男'):
	代码块
这里为gender设置了默认参数'男',在调用函数时不传入gender参数时默认就为'男'

例子:

声明函数,需要传入三个参数

def func(name, age, gender='男'):
	print('名字:', name)
	print('年龄:', age)
	print('性别:', gender)

调用函数

func(name='张三', age='20')
名字: 张三
年龄: 20
性别: 男

当一个参数不是必须传入时,就可以使用默认参数给定默认值
但如果调用函数时指定了参数,则默认参数不生效

例子:

声明函数,需要传入三个参数

def func(name, age, gender='男'):
	print('名字:', name)
	print('年龄:', age)
	print('性别:', gender)

调用函数

func(name='张三', age='20',gender='女')
名字: 张三
年龄: 20
性别: 女

关键字传参,位置传参,默认传参可以混合使用,但是混合使用时,位置参数必须写道前面,否则报错

不定长参数

当实参传递数与形参数不同时,可以用不定长参数解决
比如:

def num(a,b):
    print(a+b)
num(200,300,400)

由于形参数与实参数不同,所以报错

TypeError: num() takes 2 positional arguments but 3 were given

在定义函数的时候,可以在形参的前面加上一个 * ,这样这个形参将会获取到所有实参
它将会把这些实参保存到一个元组当中

  • *形参只能接受位置参数,不能接受关键字参数
def num(*a):
    print(a)
num(200,300,400)
(200, 300, 400)
  • 带*号的形参只能有⼀个,可以和其他参数配合使⽤
def num(*a,b):
    print(a,b)
num(200,300,500,b=30)
(200, 300, 500) 30
def num(a,*b):
    print(a,b)
num(200,300,500,30)
200 (300, 500, 30)
  • **形参可以接收其他的关键字参数,它会将这些参数统⼀保存到字典当中。字 典的key就是参数的名字,字典的value就是参数的值
  • **形参只有⼀个,并且必须写在所有参数的后⾯
def num(b,**a):
    print(a,b)
num(a=1,b=2,c=3)
{'a': 1, 'c': 3} 2

参数解包

  • 传递实参时,也可以在序列类型的参数前添加星号,这样它会⾃动的将序列 中元素依次作为参数传递
  • 要求序列中的元素的个数必须和形参的个数⼀致
def num(a,b,c):
    print('a=',a)
    print('b=',b)
    print('c=',c)
t = (1,2,3)
num(t[0],t[1],t[2])
a= 1
b= 2
c= 3
def num(a,b,c):
    print('a=',a)
    print('b=',b)
    print('c=',c)
t = {'a':1,'b':2,'c':3}
num(**t)
a= 1
b= 2
c= 3

猜你喜欢

转载自blog.csdn.net/xdc1812547560/article/details/107517076