【数据分析】python基础必修4—函数/递归/变量的作用域

1.函数

之前接触过的一些函数

print / bin / oct / is / str / int

函数的特点与作用

(1)实现某一功能

(2)隐藏内部实现细节

(3)避免重复代码

1.1函数的参数 

# 函数定义的格式

def my_fun():
    pass

# 函数的参数
# 必须参数

def my_func_with_param(p1,p2):
    print(p1,p2)

my_func_with_param(1,2)

'''
形参:形式参数,它只是意义上的一种参数,在定义的时候不占内存地址。
实参:实实在在的参数,是实际占用内存地址的。
'''

# 关键字参数:是在调用的时候制定参数名称,可以不按照顺序传参数。
def my_func_with_param(name,age):
    print(name + "来了,他今年" + str(age) + "岁!") # age必须类型转换成字符型,否则报错

my_func_with_param(name = "老王",age = 50) # 关键字参数,指定数据。

# 默认参数 如果调用者没有船只,那么就用默认值,可以不指定名字
def my_func_with_param(name = "小杨",age = 22):
    print(name + "来了,他今年" + str(age) + "岁!") 

my_func_with_param() 


# 参数混合使用
# 混合使用时,非默认参数必须在默认参数的前面
def my_func_with_param(name,age = 22):
    print(name + "来了,他今年" + str(age) + "岁!") 

my_func_with_param(name = "小杨") 

1.2函数的返回值

'''
函数的返回值
'''

def func_with_return():
    print("函数被调用")   # 没有返回值

p = func_with_return()
print(p)
print(type(p))   # 打印p的类型,输出应该是'NoneType'


def func_with_return(p):
    return p  

p = func_with_return(5)
print(p)
print(type(p))   # 打印p的类型,输出应该是'int'


def func_with_return(p):
    return p  

p = func_with_return("python")
print(p)
print(type(p))   # 打印p的类型,输出应该是'str'
# 多个返回值

def func_with_return(name,age):
        return name,age

n,a = func_with_return("小杨同学",22)  # 此处用两个参数接该函数的返回值
print(n,a)


def func_with_return(name,age):
        return name,age

s = func_with_return("小杨同学",22)  # 此处用一个参数接该函数的返回值
print(s)

输出结果

 对比以上两个输出结果

当用一个参数来接函数的返回值时,输出结果为小括号形式,即元组(元组用小括号表示)。

# 返回一个函数

def func_with_return2(x):
        if x == 2:
            def inner_func(y):
                return y * y
        if x == 3:
            def inner_func(y):
                return y * y * y
        return inner_func    # 此处返回内函数

calc = func_with_return2(3)  # 调用函数
print(calc(4))    # 计算4的立方

 2.递归

在函数中,自己调用自己

重点:要明确递归结束的条件

优点:写法非常简洁

缺点:效率低

要求:每次递归的时候,规模都要有所缩小

逻辑:每两次相邻的调用,前一次要为后一次做准备

# 陷入无限循环的递归
def my_func(x):
    print(x)
    my_func(x + 1)

my_func(1)


'''
典例:阶乘计算
'''

def f(x):
        if x == 1:
                return 1
        print("计算" + str(x) + "*" + str(x - 1))
        return x * f(x - 1)

print(f(3))  # 打印3的阶乘

作业:递归查找

有一个不规则的list = [4,6,7,9,11,2,90,44]

定义一个函数

功能要求:

接受一个list和一个数字

返回数字在列表中排序后的位置,如果出错或者没有就返回-1

'''
思路:
1、首先按照从小到大将列表排序
2、查找list中间的数字,比我们输入的参数大还是小(用折半查找)
'''

 3.特殊函数

'''
__name__
只有在本模块启动时,__name__变量等于__main__
在什么时候使用
1、可以作为这个模块的入口,在其他语言中,叫做main函数
2、也可以作为调试使用,原因是:在其他模块调用本模块时,__name__="main"
判断结果为False,所以就不会执行
'''

def my_print():
    print(__name__)

if __name__=="main":
    my_print() # 调用函数
    print(1)
    print(__name__)

4.变量的作用域

if True:
    name = "小杨同学"

print(name)

'''
在python中没有块级的作用域
代码块里的变量,外部是可以调用的
'''

def func():
    name = "小杨同学"

print(name) # 运行这块代码会报错,因为函数内部的变量,外部不可以调用

'''
变量的作用域链
'''

def func1():
    name = "哆啦A梦"
    def func2():
        name = "大雄"
        print(name)
    func2()
    print(name)

func1()

输出结果

代码说明:为什么先输出大雄呢?

首先,程序进入函数执行func2,func2里面执行print(name),打印出大雄,然后调用func2

最后打印func1中的print(name),输出哆啦A梦,调用func1 

4.1作用域练习 

name = "静香"

def f1():
    print(name)

def f2():
    name = "大雄"
    f1()

f2()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值