python学习笔记-06

函数进阶

1.无参数无返回值:这类函数往往用于提示信息打印
2.无参数有返回值:这类函数往往用于数据采集过程中
3.有参数有返回值:这类函数一般是计算型的
4.有参数无返回值:这类函数多用于设置某些不需要返回值的参数设置

1.局部变量

局部变量的作用域只在局部,出了作用域就不能使用了。不同的函数可以定义相同的局部变量,但是都是各自用各自的,不会产生影响。

局部变量可以是任何类型。

print('---------局部变量-----------')
def Part1():
    a=1
    print(a)
    pass
def Part2():
    a=2
    print(a)
    pass
Part1()
Part2()
print(a)   #局部变量只在局部起作用,出了范围后就会释放掉

在这里插入图片描述

2.全局变量

全局变量定义在全局,作用域为全局,什么类型都行。

print('---------全局变量-----------')
pro='全局变量'
def All1():
    print('在All1函数中使用全局变量:',end=' ')
    print(pro)
    pass
def All2():
    print('在All2函数中使用全局变量:',end=' ')
    print(pro)
    pass
print('在函数体外使用全局变量:', end=' ')
print(pro)
All1()
All2()

当全局变量和局部变量名称相同时,优先使用函数内部的变量
但是要注意出现这种情况时,在声明局部之前不可以使用,不然会报错

print('---------全局变量-----------')
pro='全局变量'
def All1():
    print('在All1函数中使用全局变量:',end=' ')
    print(pro)
    pro='改变全局变量的值'
    print('改变全局变量的值后的输出:',end=' ')
    print(pro)
    pass
print('在函数体外使用全局变量:', end=' ')
print(pro)
All1()

在这里插入图片描述
报错👆
正确的使用方法:

print('---------全局变量-----------')
pro='全局变量'
def All1():
    pro='改变全局变量的值'
    print('改变全局变量的值后的输出:',end=' ')
    print(pro)
    pass
print('在函数体外使用全局变量:', end=' ')
print(pro)
All1()

在这里插入图片描述
在函数中修改的全局变量出函数之后就会回归为原来的全局变量值。如果想要彻底修改,需要用到global关键字:

Qu='全局变量'
print(Qu)
def All():
    global Qu
    Qu='变量'
    pass
All()
print(Qu)

在这里插入图片描述

3.引用

在python中,值是靠引用传递的,可以用id()查看一个对象的引用是否相同,id是值存在内存中那块地址的标识。

a=1    #不可变类型,如int类型等
def fun1(x):
    print('x的内存地址{}'.format(id(x)))
    print('x的值%d'%x)
    x=2
    print('改完x的值后x的内存地址{}'.format(id(x)))
    print('此时x的值是%d'%x)
    pass
print('a的内存地址{}'.format(id(a)))
fun1(a)
print('a的值是{}'.format(a))

在这里插入图片描述
如果是可变类型,数据是同步变化的:

li=[]  #可变类型
def fun1(x):
    print('x的内存地址{}'.format(id(x)))
    x.append([1,2,3,4])
    print('x的内存地址{}'.format(id(x)))
    print('此时的x{}'.format(x))
    pass
print('li的内存地址{}'.format(id(li)))
fun1(li)
print('此时的列表{}'.format(li))
print('由此可以看出可变类型在内部函数改变值后,可以传到外面')

在这里插入图片描述

在python中,所有的东西都是对象,在函数调用的时候,实参传递的就是对象的引用,参数传递是通过对象引用完成的。

4.匿名函数

python中使用lambda关键字创建匿名函数,所谓匿名函数是指这个函数没有名字,不用def创建标准的函数。

lambda 参数1,参数2,参数3: 执行代码语句..
匿名函数冒号后面的表达式有且只有一个,是表达式不是语句
自带return,结果就是表达式计算结果
只能实现简单逻辑,复杂逻辑实现不了
M=lambda x1,x2:x1+x2
print(M(1,2))

#用正常实现:
def fun1(n1,n2):
    return n1+n2
print(fun1(1,2))

#lambda和三元运算:
def fun2(a):
    if a==1:
        return 1
    else:
        return 2
    pass
n=lambda a:1 if a==1 else 2
print(fun2(2))
print(n(1))
#python中的幂运算:
print(2**4)

在这里插入图片描述

5.递归函数

递归函数就是一直调用自己,不调用其他函数的函数。递归函数必须有一个结束的条件,否则递归无法结束一直运行会死循环或到达最大递归深度后报错。

print('-----------循环求阶乘-------------')
#求阶乘:
def fun1(n):
    i=1
    sum=1
    while i<=n:
        sum*=i
        i+=1
        pass
    return sum
print(fun1(10))
print('---------递归方式求阶乘------------')
#递归求阶乘:
def fun2(n):
    if n==1:
        return n
    else:
        return n*fun2(n-1)
    pass
print(fun2(10))

在这里插入图片描述

#递归小练习:
#取文件
import os  #引入文件操作模块
def findFile(file_path):
    listRs=os.listdir(file_path)  #得到路径中所有文件夹
    for item in listRs:
        full_path=os.path.join(file_path,item)   #获取完整的文件路径
        if os.path.isdir(full_path): #判断是否是文件夹
            findFile(full_path)    #如果是文件夹就继续遍历
        else:
            print(item)
            pass
        pass
    else:
        return
    pass
findFile('D:\\octaveFunction')  #多打一个\转义

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值