第七课 函数 递归,闭包等

#    pass
#def print(self, *args, sep= , end='\n'', file=None):
'''
    在python中除了内置函数,还可以自创函数,以及自己定义里面的方法>自定义函数

'''


#定义方法
'''
def 函数名(参数):
    函数的功能
    函数的使用(调用的方法)
    函数名
'''

#判断字符串是不是手机号,如果有很多手机号要判断怎么办?
'''
def isphone():



isphone()
'''


# 我们可以对于函数的名字,查询它存在的意义

#函数名能够像变量的值 一样被 传递
#c= isphone()

#问题测试-只有自己创建的函数可以用变量吗
a = print
a('这是print函数功能的变量名a')

#return: 函数的返回值  (关键字)
#当函数定义时,里面使用return 在调用函数时进行打印,那第打印的内容就是返回之后的内容
def test1():
    print('这是一个没有返回值的函数')

test1()
print(test1())

def test2():
    return '这是有返回值的函数'
print(test2())  #函数中有return的返回值时,则会打印出return后面的内容

def test3():
    a = 1
    b = 2
    c = 4
    return a + b


print(test3())

# 函数调用 的内容 ,也可以赋值给一个变量或者直接用来执行其它操作

a =  test2()
print(a)

# 函数调用的内容只能打印return后面的第一个内容

#函数的参数,用于计算两个数之间的和,并反结果打印出来
def funcition1():
    s = 2 + 2
    print(s)
    funcition1()

def func2():
    num1 = int(input('输入第一个数'))
    num2 = int(input('请输入第二个数'))
    print(num1 + num2)
func2()


#以下为函数中的有参函数(函数中有参数的就是有参函数,无参数的就是无参函数)
#当定义了两个参数后,当定义了两个巡视后在调用 时也必须 使用两个参数
def func3(num1, num2): #函数中的参数
    return num1 + num2
    print(func3(2, 3))  # ctrl+p出提示
print(func3(3,19))
'''
#默认参数,运行函数之前我们就可以给参数一个默认值
#定义一个函数,于于结算小时工的工资,默认普通员工为13每小时,如果时薪不一样可以自己更改
并且要写出今天工作的自我评价以及给自己打分
再在后面录入一下自己昨天和今天的工作时长

'''
hour = int(input('请输入你的工作时长'))
hourly_wage = int(input('请输入你的时薪'))
def salary(hour, hourly_wage = 13): #默认参数
    return hour * hourly_wage
print(salary(hour,hourly_wage))
#不定长参数 *args   **kwargs  如果使用多个参数可以使用
#可以接受多个参数,不用额外一一定义
def salary1(hour, hourly_wage, *args, **kwargs):
    print(args) #打印*args时不需要输入*。使用*args接受没有被定义的元素,是以元组的形式保存(args这一个不定长参数)
    print(kwargs) #使用**kwargs接受已经被定义的元素凤字典的键值对形式保存

    print(hour*hourly_wage)

    return hour * hourly_wage
salary1(8, 13, '今天的工作还是很努力,自我感觉良好','字符串内容',1,  9.8, day1 = 8, day2 = 8)

'''
函数的作用域
分为两种:全局作用域:函数内部可以访问外部的变量
        局部作用域
'''
a = 1
def test11():
    print(a)

"""
递归函数
数学中的阶乘 5的阶乘(5!)
5*4(5-1)*(5-1-1)*2(5-1-1-1)*1(5-1-1-1-1)
例如
n = 5
"""
#n = 5的递归
num1 = 1
for i in range (1,6):
    num1 = num1 * i
    print(num1)

#    创建递归函数
def func(n):
    if n <= 1:
        return  1
    else:
        return  n * func(n - 1)
print(func(5))

'''
匿名函数:无需def关键字定义函数,使用关键字 lambda 将函数写成一行,用变量名接收,
此时变量名就是函数名
'''
#创建一个两个数字相加的匿名函数
#格式 :lambda 定义参数:参数的运行结果
add = lambda x, y:x + y #使用变量接收匿名函数的内容,并且变量名作为函数名

#在列表list的排序方法(sort)中,可以使用lambda来定义排序的每个元素的操作
li = ['a',1, 7, 'b','c']

li.sort(key=lambda a: str(a))
print(li)

li = ['watermelon', 'apple', 'banana']
li.sort(key=lambda x:len(x)) #key为参数名,后面的内容为排序的操作
print(li)

#今日作业
'''
使用(def)关键字创建自定义函数
通过(return )关键字可以结束函数,从而选择性的返回一个值 调用方
创建一个函数,参数是正整数,如果整数是质数,返回True,否则返回False

'''
'''
函数的作用域
分为两种:全局作用域:函数内部可以访问外部的变量,但是不能直接修改
        局部作用域:多用于嵌套的函数中在内部的函数里峳 改外部函数的变量
'''
a = 1
def test11():

    global a #如果需要修改a 必须用global
    a = a + 1 #此处不能直接修改,需要用到关键字global进行声明,才能进行修改
    print(a)
test11()  #
def test4():
    num = 5
    def test11():
        #局部变量进行修改时也要一个声明 :声明局部变量时要使用关键字nonlocal
        nonlocal num
        num = num + 1
        print(num)
    test11()
test4()
"""
函数的闭包
访问嵌套函数里的内容时,可以隐藏嵌套中内部函数调用的代码
同时可以保护代码不被其它程序修改

"""

def test5():
    val = 0
    def test6():
        nonlocal val
        val += 1
        print(val)
    return test6 #与普通内嵌套的内部函数名奖在外部函数被返回时
x = test5()
x()   #test5()()
test5()()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值