python学习笔记(十)——函数

有参函数

def max_number(a,b): #形参
    if a > b:
        print("最大值为",a)
    else:
        print("最大值为",b)
        
max_number(12,674) #实参(实参与形参相对应)      

输出结果

最大值为 674

有参函数——冒泡排序

list1 = [23,56,5,67,89,5678,2,0,456]
def maopao(newlist):
    for j in range(0,len(list1)-1):
        for i in range(0,len(list1)-1):
            if list1[i] > list1[i+1]:
                list1[i],list1[i+1] = list1[i+1],list1[i]
maopao(list1)
print(list1)

输出结果

[0, 2, 5, 23, 56, 67, 89, 456, 5678]

有返回值的函数创建

def max_num(a,b):
    if a > b:
        return a
    else:
        return b
m = max_num(56,97)
print(m)

输出结果

97

如何筛选出一个给定列表的偶数

list1 = [21,34,23,4,23,567,8,800,0,13]
def oushu_list(listone):
    new_list = []
    for i in listone:
        if i % 2 == 0:
            new_list.append(i)
            return new_list

list_new = oushu_list(list1)
print(list_new)

输出结果

[34]

求两个数的平均值

def average_number(a,b):
    c = (a + b)/2
    print(c)
average_number(6,10)

输出结果

[8.0]

求阶乘的函数

def  jc(a):
    sum = 1
    for i in range(1,a+1):
        sum = sum * i
    return sum
    
c = jc(5)
print(c)

输出结果

[120]

求列表中能被3整除的数

def zc_list(lists):
    new_list = []
    for i in lists:
        if i % 3 == 0:
            new_list.append(i)
    return new_list
list = [1,3,5,7,9,27,0,57,99]
list_new = zc_list(list)
print(list_new)

输出结果

[3, 9, 27, 0, 57, 99]

打印输出星号矩阵

def juzhen(a,b):
    for i in range(a):
        print("*"*b,end = '\n')
    return
juzhen(4,4)

输出结果

****
****
****
****

求多个数的平均值

def average(*numbers):
    sum = 0
    print(numbers)
    for i in numbers:
        sum = sum + i
        
    return sum/len(numbers)
a = average(7,4,917,1567)
print(a)

输出结果

(7, 4, 917, 1567)
623.75

位置传参

def max_num(a,b):
    if a > b:
        return a
    else:
        return b
    
m = max_num(56,97)
print(m)

输出结果

97

关键字传参(采用参数 = 值,不考虑参数位置)

def max_num(a,b):
    if a > b:
        return a
    else:
        return b
m = max_num(a = 56,b = 97)
print(m)

输出结果

97

默认值传参

def max_num(a,b = 56):
    if a > b:
        return a
    else:
        return b
m = max_num(12)
print(m)

输出结果

56

可变参数(自动组装元组)*

def animals(*name):
    print(name)
    print(type(name))
    str_name = ""
    for i in name:
        str_name += i
    return str_name
animals("大象","老虎","小狗","小猫")
print(str)

输出结果

('大象', '老虎', '小狗', '小猫')
<class 'tuple'>
<class 'str'>

可变参数(自动组装字典)**

def animals(**name):
    print(name)
    print(type(name))
    
animals(name1 = "大象",name2 = "老虎",name3 = "小狗",name4 = "小猫")

输出结果

{'name1': '大象', 'name2': '老虎', 'name3': '小狗', 'name4': '小猫'}
<class 'dict'>

可变和不可变数据类型

(当该数据类型的对应变量的值发生了改变,内存地址也发生改变就是不可变数据类型,对应内存地址不发生改变就是可变数据类型)

整型为不可变数据类型

a = 1
print(id(a))
a = 12
print(id(a))

输出结果

140725609879200
140725609879552

字符串为不可变数据类型

a = "abc"
print(id(a))
a = a+"d"
print(id(a))

输出结果

1740967694640
1740977049200

元组不可变,相当于只读模式

列表是可变数据类型

a = {"a":12,"b":14,"c":64}
print(id(a))
a["d"] = 20
print(id(a))

输出结果

1912852989120
1912852989120

字典是可变数据类型

a = {"a":12,"b":14,"c":64}
print(id(a))
a["d"] = 20
print(id(a))

输出结果

1650089673856
1650089673856

集合是可变数据类型

a = {23,4,45,56,34,6}
print(id(a))
a.add(13)
print(id(a))

输出结果

2659122171968
2659122171968

值传递和引用传递

值传递:不可变数据类型对象,在函数里进行值的修改,源对象不会被修改
引用对象:可变数据类型,在函数里进行值的修改,源对象也会被修改

a = 10 #表示不可变类型
b = [12,34,56,678] #表示可变类型
#定义函数
def change(x,y):
    #分别修改值
    x = 2
    y[0] = 1
    
change(a,b)
print(a)
print(b)    

输出结果

10
[1, 34, 56, 678]

变量与作用域

局部变量:定义在函数中,作用域在函数内部

def func():
    a = 1
    print(a)

全局变量:定义在函数外的变量,在全局都可以使用的变量

a = 12#这是一个全局变量
def func():
     print(a+23)
print(a)
func()

输出结果

12
35

global关键字
当内部作用域想修改外部作用域的变量时,就要用到global关键字。

a = 12
def func():
    global a
    a = 200
    print(a+23)
func()
print(a)

输出结果

223
200

函数嵌套和嵌套调用

函数的嵌套(在函数的内部再定义函数)

def func1():
    print("这是外部函数")
    def func2():
        print("这是内部函数")#内部函数不能直接被调用
    func2()
func1()    

输出结果

这是外部函数
这是内部函数

函数的嵌套调用(在一个函数中调用另一个函数)

def func1():
    print("第一个函数")
def func2():
    print("第二个函数")
    func1()
func2()        

输出结果

第二个函数
第一个函数

递归函数

递归函数:一个函数内部自己调用自己(递归函数调用的次数过多,会导致栈溢出)
1、必须要有一个明确的结束条件。
2、每次进入更深一层递归时,问题规模比上次递归都应有所减少。
3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作业为后一次的输入)。

return的两个作用:
1.用来返回一个值给函数
2.用来结束函数

递归求sum = n+(n-1)+(n-2)+(n-3)…1的和

def sum(n):
    if n > 0:
        return n + sum(n-1)
    else:
        return 0
print(sum(4))
        

输出结果

10

递归求n!=1x2x3x…x(n-1)n阶乘

def sum(n):
    if n == 1:
        return 1
    else:
        return n*sum(n-1)
print(sum(10))        

输出结果

3628800

if…else…三元运算

普通判断

a = int(input("请输入有理数:"))
if a>0:
    print(a)
else:
    print(-a)

将此程序改为三元函数

a = int(input("请输入有理数:"))
print(a) if a > 0 else print(-a)
def max2(x,y):
    if x >y:
        return x
    else:
        return y
print(max2(2,3))

将此程序改为三元函数

def max2(x,y):
	return x if x>y else y #函数中的应用
print(max2(23))

匿名函数(程序不复杂时使用)
变量名= lambda 参数列表:表达式

func = lambda:1 == 3 #创建一个匿名函数
f = func()
print(f)
func2 = lambda x, y,z:x+y+z#传递多个参数
f = func2(1,2,3)
print(f)
func3 = lambda x, y : y if x > y else x#使用if...else..语句
f = func3(1,2)
print(f)

普通判断

def max2(x,y):
    if x >y:
        return x
    else:
        return y
print(max2(2,3))

将此程序改为匿名函数

func = lambda x:y if x>y else y
f = func

函数闭包(在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量并且外函数的返回值是内函数的引用,这样就构成了一个闭包)

step1:嵌套函数

def outer():
    b = 20
    print(b)
    def inner():
        a = 10
        print(a)
    inner()
outer()
test()#调用内函数

step2:返回函数

def outer():
    b = 20
    print(b)
    def inner():
        a = 10
        print(a)
    return inner
test = outer()
test()#调用内函数

step3:闭包

def outer():
    b = 20
    print(b)
    def inner():
        a = 10
        print(a+b)
    return inner
test = outer() 
test()#调用内函数
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值