Python函数

Python函数

在计算机中称之为函数,在现实生活中称之为功能。

函数是能够实现特定功能的计算机代码,它是一种特定的代码组结构

一、函数的作用

1.提高代码的重复利用率,避免重复开发相同代码

2.提高程序的开发效率

3.便于程序维护

二、函数名的命名规则

1.推荐使用英文,禁止使用中文

2.可以使用数字,但不能以数字开头

3.不可以使用特殊字符,除了下划线_

4.函数名严格区分大小写

5.函数名必须要有意义

6.不能和系统保留关键字冲突

三、函数的声明方式

格式:

def 函数名():
    pass

示例:

#定义函数
def xxoo():
    pass #此处编写功能代码

xxoo() #调用

'''
	函数的特征:函数定义之后,不会自动执行,只会在调用的时候执行。不调用,不执行。
'''

四、函数的返回值

根据执行函数完毕是否可以得到一个结果,我们可以将函数分为两种类型。

执行过程函数:
    函数执行完毕之后,接收不到任何返回结果的函数。

返回值函数:
    函数执行完毕之后,会产生一个结果,可以被接收和使用的函数。

格式:

def 函数名(参数):
    
    return 返回值		 #有return的函数,就是有返回值的函数

函数名(参数)

'''注意:
    1.具有return语句的函数,我们称之为具有返回值的函数
    2.return可以为当前函数执行完毕的函数返回一个结果,这个返回值可以用变量接收
    3.return执行之后,函数将会终止,所以return之后的语句是不会被执行的
    4.一个函数可以使用多个return语句,但是只有一个会被执行,一般都是放入分支结构中
    5.一个函数如果需要返回多个数据,使用复合数据类型(list,tuple,set,dict)来操作即可
    6.函数内部通过判断和循环语句可以实现很复杂的逻辑。即使return 后没有信息,也会返回一个None
'''

返回一个值的函数

def xxoo():
	x = 10
	if x > 1:
		return x
	else:
		return -x
		
print(xxoo())

返回多个值的函数

def xxoo():
    x = 10
    y = 20
    return x,y

print(xxoo())

赋值给变量

def xxoo():
    x = 10
    y = 20
    return x,y

func = xxoo()
print(func)

'''
	结果: (10, 20)
	在返回多个值的时候,实质上函数是把返回值作为一个元组返回的。本质上是只有一个返回值的。
'''

五、函数的参数

Python 中函数的参数可细分为必需参数、默认参数、关键字参数和可变参数(不定长参数)四种情况。

1.必需参数

必需参数是指为了确保函数正确执行,需要明确赋值的参数,所有参数都遵循按位置一一对应的原则。

格式:

def 函数名(参数1,参数2...):
    pass

示例:

#定义带有参数的函数
def funName(name):
    print('接收到的参数:',name)

funName('joker_wang') #调用

'''注释:
	形参:形式上的参数,声明函数时,括号()中的参数,是形参。
	实参:实际上的参数,调用函数时,括号()中的参数,是实参。
	实参将值传递给形参的本质过程,本质上就是简单的变量赋值。
'''

2.默认参数

默认参数是指为函数的参数取一个默认值,当调用函数时可以不传入具有默认值的参数,当执行函数时使用该默认值参与运算

格式:

def 函数名(参数1 = 值1,参数2 = 值2...):
    pass

示例:

def stu(name, age=30 ):

    print(name, age)

stu('joker')

注意:如果形参有默认值,调用时可以不传参,系统会直接使用参数的默认值。

	  调用时给有默认值的参数传参,实参会覆盖形参的默认值。本质上就是变量的重新赋值 

def stu(name, age=30 ):

    print(name, age)

stu('joker', 28)

#结果  joker 28

'''
	注意: 
		默认参数必须在最右端,必需参数需要在最左边, 这样才能被解释器正确识别,否则会报错。
		
		 File "D:/xampp/htdocs/self-use/python/test.py", line 2
                def stu(age=30, name):
                       ^
          SyntaxError: non-default argument follows default argument

'''

3.关键字参数

关键字参数则是指在传参时指明形参的名称,并为其赋以实参的值,为了防止参数按照位置传递出现的错误。

格式:

	def 函数名(形参1 = 实参1,形参2 = 实参2...):

示例:

#定义带有默认值参数的函数
def funName(name = 'jack',age = 18,sex = 'man'):
	print('name:',name)
	print('age:',age)
	print('sex:',sex)

funName(8,'二狗','Superman') #参数较多时赋值顺序颠倒,将会影响程序执行结果
funName(age = 8,name = '二狗',sex = 'Superman') #关键字参数赋值完美解决上面的问题

4.可变参数(不定长参数)

有的函数在定义时无法指明所有的参数,或是在调用时传入的参数个数比定义时的多,这就需要用到不定长参数。

不定长参数主要有两种传入方式,一种是在参数名称前加星号*,以元组类型导入,用来存放所有未命名的变量参数

格式:

def 函数名(*参数名):
    pass

示例:

def counts( *sum ):
    t = 0
    for i in sum:
      t = t + 1
    return t

print(counts(1,2,3,4,5,6,7,4,3,2,21,1))

示例:

def counts( *sum ):
	t = 0
	for i in sum:
		t = t + 1
	return t

num = [3,5,7,9]

#需要在传递参数的时候,在参数前面再添加一个*号就可以了
counts(*num)

另一种是在参数名称前加两个星号**,以字典类型导入,用来存放所有命名的变量参数

格式:

def 函数名(**参数名):
    pass

示例:

def demo(name, age=12, **arg):

    print(name, age, arg)

demo('joker',30,sex='男',classid='bihuo01')

'''
结果
	joker 30 {'sex': '男', 'classid': 'bihuo01'}
'''


def funName(**car):
    for v in car: #遍历
        print(v,'value : ',car[v])

funName(a = '卡车',b = '火车',c = '公交车') #调用


#可变参数和关键字参数都可以  允许传入0或者任意个含参数名的参数,这些关键字参数在函数内部自动组装成为一个字典:
#传递0个参数
def demo(name, age, **arg):

    print(name, age, arg)

demo('joker',30)

'''
结果
	joker 30 {}
'''

命名关键字参数

Python的命名关键字参数对传入的关键字参数做了进一步的限制。

格式:

#在关键字参数前增加一个”*”。
def personinfo(name, age, *, gender, city): #只能传递gender和city参数
    
    print(name, age, gender, city)
    
personinfo('john', 22, gender = 'male', city = 'Beijing')




各种参数之间组合
一次函数调用可以传递以上所述任何一种参数或者多种参数的组合,当然也可以没有任何参数。
正如默认参数必须在最右端一样,使用多种参数时也对顺序有严格要求,也是为了解释器可以正确识别到每一个参数。

顺序:必需参数、默认参数、可变参数、命名关键字参数和关键字参数。

六、递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个就是递归函数

示例:

#定义一个递归函数
def tubie(num):
    #1.输出num
    print(num)
    #2.判断条件,不改变num
    if num >=1:
        tubie(num-1)
    else:
        print('================')
    #3.输出num
    print(num)
#调用递归函数
tubie(3)

示例:

# 1~10之和
def digui(n):
    if n==1:
        return 1
    return n + digui(n-1)
print(digui(10))


def digui(n):
    if n > 0:
        return n + digui(n-1)
    else:
        return 0
print(digui(10))

七、作用域

1.函数作用域

在函数内部声明的函数就是内部函数。

格式:

def 函数名():
    局部变量...
    def 内部函数名():
        Python功能代码...

示例:

def funName():
    name = 'dragon'
    #定义一个内部函数
    def inner():
        print('我是内部函数')

'''
    1.内部函数的本质就是局部变量(函数就是一个变量)
    2.内部函数在函数外部不可以直接调用
    3.内部函数在函数内部调用(当然,必须要定义内部函数之后才能调用)
'''

nonlocal使用

nonlocal关键字的意义,不是局部变量,当然他也不是全局变量,通常用于内部函数中使用外部函数的局部变量。

#声明一个外部函数
def outer():
    #声明一个变量(肯定不是全局变量)
    x = 5
    #声明一个内部函数
    def inner():
        nonlocal x  #声明x不是局部变量
        x += 9
        print(x)
    #调用函数
    inner()
#调用outer
outer()

'''
如果内部函数使用的是外部函数的局部变量,那么应该使用nonlocal声明
(内部函数的外层,外部函数的局部变量)
'''

2.变量作用域

变量的作用域就是指变量的有效范围。

变量按照作用范围分为两类,分别是 全局变量 和 局部变量。

全局变量:在函数外部声明的变量就是全局变量

有效范围:
    全局变量在函数外部可以正常使用
    全局变量在函数内部也可以正常使用

局部变量:在函数内部声明的变量就是局部变量

有效范围:
    局部变量在函数内部可以正常使用
    局部变量在函数外部不可以访问

global关键字

global的作用就是把局部变量提升为全局变量

格式:

def 函数名():
    global 变量名
    函数功能代码...

示例:

def funName():
    global name #如果不使用global关键字,外部是无法访问变量name的。
    name = 'dragon'

funName()  #调用
print(name)  #尝试访问内部函数

'''
	global只有在函数内部对变量进行全局声明,该变量才是一个完整的全局变量(在函数外部可以对该变量进行任意操作)。
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值