【初学者入门Python基础七】

初学者入门Python基础七


前言

本篇内容分享的是Python基础中的函数的使用,在一个程序中对于函数的调用是很重要的一部分,通过本篇内容也将学会Python进行函数声明的语法格式以及如何正确使用,同样也是通过demo进行演示。


一、什么是函数?

函数就是执行特定任务和完成特定功能的一段代码
为什么需要函数?
1)复用代码
2)隐藏实现细节
3)提高可维护性
4)提高可读性便于调试

二、函数的创建

在这里插入图片描述

定义一个函数实现两数之和

def calc(a,b):       #a b 为形参 位置是在函数的定义处
    c = a+b
    return c

ret = calc(10,29)  #10 29为实参 位置在函数的调用处
print(ret)


ret = calc(b = 10,a = 20)  #= 左侧的变量名称为关键字参数
print(ret)

在这里插入图片描述

在函数内部进行数值添加

def fun(arg1,arg2):
    print('arg1:',arg1)
    print('arg2:',arg2)
    arg1 = 100
    arg2.append(10)

    print('arg1:',arg1)
    print('arg2:',arg2)
    #return


n1 = 11
n2 = [22,33,44]
print('n1:',n1)
print('n2:',n2)
fun(n1,n2)                   #将位置传参 arg1 arg2是函数定义处的形参 n1 n2是函数调用处的实参 总结:实参名与形参名可以不一致

print('n1:',n1)
print('n2:',n2)



'''在函数调用过程中,进行参数传递

    如果是不可变对象,在函数体的修改不会影响实参的值 arg1的修改为100 不会影响N1的值
    如果是可变对象,在函数体的修改会影响实参的值    arg2值的添加会影响到n2的值
'''

在这里插入图片描述

输入一个范围分别输出偶数和奇数

print(bool(0))    #False 为偶数
print(bool(1))    #True  为奇数


def fun(num):
    odd = []    #存奇数
    even = []   #存偶数
    for i in range(num):
        if(i % 2):
            odd.append(i)
        else:
            even.append(i)
    return odd,even
 
print(fun(20)

在这里插入图片描述

从上面的结果我们可以看出当布尔值为0是返回False为偶数 布尔值为1返回True时为奇数,并且返回return 和我们以往接触的c语言的返回值也不一样。

注意:

#函数调用
'''函数的返回值
1) 如果函数没有返回值 函数执行完毕后 不需要给调用处提供数据 return可以省略不写
2) 函数的返回值 如果是1个直接返回类型
3) 函数的返回值 如果是多个 返回值为元组
'''
def fun1():
    print('hello')
    #return

fun1()

def fun2():
    return 'hello'

res = fun2()
print(res)

def fun3():
    return 'hello','world'

print(fun3())

在这里插入图片描述


三、函数参数问题

3.1 函数定义默认值参数

在这里插入图片描述


def fun(a,b = 10):     #b为默认值参数
    print(a,b)


#函数调用
fun(20)
fun(20,30)

在这里插入图片描述

3.2 个数可变的位置参数和关键字参数

个数可变的位置参数

定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组

def fun(*arg):           #函数定义时的,可变的位置参数  结果是元组
    print(arg)
   # print(arg[0])

fun(10)
fun(10,20,30)

在这里插入图片描述

个数可变的关键字参数

定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变额关键字形参
结果为一个字典

def fun1(**arg):       # 位置可变的关键字参数   结果是字典
    print(arg)

fun1(a = 10)
fun1(a = 20,b = 30,c = 40)

在这里插入图片描述

注意点:

''''
def fun2(*arg,*a):
    pass

以上代码会报错,可变的位置参数 只能是1'''

'''
def fun3(**arg,**a):
    pass
以上代码会报错,个数可变的关键字参数 只能是1'''

def fun3(*args1,**args2):
    pass

'''
def fun3(**args1,*args2)
    pass
在一个函数定义过程中,既有个数可变的位置参数 又有个数可变的关键字参数
位置可变参数必须在前面,关键字参数在后面 ,要不然要报错
'''

3.3 传参demo

def fun(a,b,c):  #abc在函数定义处 是形式参数
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)

#函数的调用
fun(10,20,30)   #函数调用的时候参数传递  称为位置传参
lst = [11,22,33]
fun(*lst)    #函数调用时将列表中的每个元素都转换成位置实参传入


print('---------------------------------------------')
fun(a = 100,c = 200,b = 250)   #函数调用是 = 关键字传参

dic = {'a':111,'b':222,'c':333}
fun(**dic)           #函数调用是 将字典中的键值对都转换为关键字实参传入

在这里插入图片描述

def fun(a,b = 10): #b 在函数的定义处 所以是形参 而且进行了赋值 所以b为默认值形参
    print('a = ',a)
    print('b = ',b)


def fun2(*args):  #个数可变的位置形参
    print(args)

def fun3(**args2):  #个数可变的关键字形参
    print(args2)


fun2(10,20,30,40)
fun3(a = 11,b = 22,c = 33,d = 44)


def fun4(a,b,*,c,d):    #从*之后的参数 在函数调用时只能是关键字参数传递   *为关键字形参
    print('a = ',a)
    print('b = ',b)
    print('c = ',c)
    print('d = ',d)

#调用
#fun4(10,20,30,40)    #位置实参传递
fun4(a = 10,b = 20,c = 30,d = 40)   #关键字实参传递
fun4(10,20,c = 30,d = 40)  #前两个参数,采用的是位置实参传递  后两个是关键字传递

'''
需求:c d 只能采用关键字实参传递
'''



'''函数定义时的形参的顺序问题'''
def fun5(a,b,*,c,d,**args):
    pass

def fun6(*args,**args2):
    pass
def fun7(a,b = 10,*args,**args2):
    pass

在这里插入图片描述

3.4 变量作用域

def fun(a,b):
    c = a + b  #c为局部变量在函数体内起作用 a,b 为函数的形参也是在函数内部起作用
    print(c)


#print(c)     #会报错

name = 'Jack'   #name作用范围是函数内部和外部都可以  ---》全局变量
print(name)
def fun2():
    print(name)
#调用函数
fun2()


def fun3():
    global  age   #函数内部定义的变量为局部变量 ,局部变量使用Global声明后实际为全局变量
    age = 20
    print(age)

fun3()
print(age)

在这里插入图片描述
在这里插入图片描述

3.5 递归函数

在这里插入图片描述

使用递归函数求5的阶乘

#5!
def fun(n):
    if(n == 1):
        return 1
    else:
        return n *fun(n-1)
120

斐波拉契数列

def fun2(n):
    if(n == 1):
        return 1
    elif (n == 2):
        return 1
    else:
        return fun2(n-1) + fun2(n-2)


#斐波拉契数列第6位上的数字
print(fun2(6))

#输出前6for i in range(1,7):
    print(fun2(i))

在这里插入图片描述

对Python的基础知识到这就差不多学完了,通过这几篇的学习对Python的基础语法也有了认识,后面还是需要自己多练习,将基础的认识熟悉掌握。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值