第八章(函数的使用等等)

format内置函数的使用

print(format(10,"20"))#数值型默认右对齐
print(format("hellow","20"))#字符串默认左对齐
print(format("hellow","*<20"))
print(format("hellow","*>20"))
print(format("hellow","*^20"))
print(format(3.1415926,".2f"))
print(format(10,"b"))#二进制
print(format(10,"o"))#八进制
print(format(10,"x"))#十六进制

代码结果

                  10
hellow              
hellow**************
**************hellow
*******hellow*******
3.14
1010
12
a

关键字传参

def happy_birthday(name,age):
    print("祝",name,"生日快乐")
    print(f"你已经{age}岁")
happy_birthday(age=18,name="111")
'''
这是关键字传参,可以调整顺序,但是关键字要和形参名一样
可以和位置参数联用,但是要位置参数在前,关键字参数在后,不然会报错
'''
happy_birthday("123",age=18)

代码结果

祝 111 生日快乐
你已经18岁
祝 123 生日快乐
你已经18岁

函数返回值

def calc(a,b):
    s=a+b
    c=a*b
    return s,c
print(calc(10,20))
print(type(calc(10,20)))
z,x=calc(10,20) #可以分解赋值  无返回值不能
print(z,x)

代码结果

(30, 200)
<class 'tuple'>
30 200

可变参数

#个数可变的位置参数
def fun(*num):
    print(type(num))
    for item in num:
        print(item)
fun(10,20,30,4)
print()
fun([10,20,30,40])
print()
fun(*[10,20,30,40])#加个*号,可以执行解包操作
print()
#个数可变的关键字参数
def fun2(**content):
    print(type(content))
    for key,value in content.items():
        print(key,"----->",value)
fun2(name="111",age=18)
d={'name':"111",'age':18}
print()
fun2(**d)#以字典为参数要进行系列解包**   不可以fun2(d)会报错

代码结果

<class 'tuple'>
10
20
30
4

<class 'tuple'>
[10, 20, 30, 40]

<class 'tuple'>
10
20
30
40

<class 'dict'>
name -----> 111
age -----> 18

<class 'dict'>
name -----> 111
age -----> 18

匿名函数的使用

#当函数只有一行代码时用来简化  关键字为lambda
s=lambda a,b:a+b
print(type(s))#<class 'function'>  为函数
print(s(10,20))
print()
#正常的列表取值
lst=[10,20,30,44]
for i in range(len(lst)):
    print(lst[i])
print()
#使用匿名函数
for i in range(len(lst)):
    result=lambda x:x[i] #x为形参
    print(result(lst))  #lst为实参
#排序
lst2=[
    {"name":1,"sorce":90},
    {"name":2,"sorce":95},
    {"name":3,"sorce":98}
]
lst2.sort(key=lambda x:x.get("sorce"),reverse=True)
print(lst2)

代码结果

<class 'function'>
30

10
20
30
44

10
20
30
44
[{'name': 3, 'sorce': 98}, {'name': 2, 'sorce': 95}, {'name': 1, 'sorce': 90}]

常见数学函数的使用

print("绝对值:",abs(100),abs(-100),abs(0))
print("商和余数",divmod(13,4),divmod(6,3))
print("最大值:",max(13,98,45),max("hellow"))
print("最小值:",min(13,98,45),min("hellow"))
print("求和:",sum([1,100,200]))
print("x的y次幂:",pow(2,3))
#四舍五入
print(round(3.1415))#只有一个参数,保留整数
print(round(3.1415,3))#第二个参数是保留的位数
print(round(314.14,-1))#第二个参数为-1即对个位进行四舍五入
print(round(314.14,-2))#第二个参数为-2即对十位进行四舍五入,以此类推

代码结果

绝对值: 100 100 0
商和余数 (3, 1) (2, 0)
最大值: 98 w
最小值: 13 e
求和: 301
x的y次幂: 8
3
3.142
310.0
300.0

变量的作用域和位置参数调用需知

'''
函数的形参和调佣时的实参
个数要相同
顺序要相同
可能会导致报错
不然使用关键字传参
'''
'''
函数内多为局部变量
函数外为全局变量
函数内用global去定义变量也为全局变量
当全局变量和局部变量重复时,局部变量优先级更高
'''

迭代器操作函数的作用

#sorted
lst=[10,20,11,25,44,56]
asc_lst=sorted(lst)
desc_lst=sorted(lst,reverse=True)
print(lst)
print(asc_lst)
print(desc_lst)
print()
#reversed
new_lst=reversed(lst)
print(type(new_lst)) #<class 'list_reverseiterator'> 不是列表需要转换才能看到
print(list(new_lst))
print()
#zip
lst2=["a","b","c","d"]
lst3=[1,2,3,4,5,6]
zipobj=zip(lst2,lst3)
print(type(zipobj))
# print(list(zipobj))#[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
print()
#enumerate
enum=enumerate(lst3,1)
print(type(enum))
print(tuple(enum))#转为列表也可以
print()
#all
lst4=[1,"",100]
print(all(lst4)) #False
print(all(lst))#Ture,全部为Ture才为Ture
print()
#any
print(any(lst4))#一个为ture就为Ture
print()
#next 找没有被转化的
print(next(zipobj))
print(next(zipobj))
print(next(zipobj))
print(next(zipobj))
print()
#filter 按照指定条件进行筛选,第一个参数为函数
def fun(n):
    return n%2==1 #返回Ture或者Flase
print(list(filter(fun,range(10))))#将返回值为Ture的留下,记得转换才能看得见
print()
#map
def change(x):
    return x.upper()
new_lst2=["hellow","baby","world"]
obj2=map(change,new_lst2)
print(list(obj2))

代码结果

[10, 20, 11, 25, 44, 56]
[10, 11, 20, 25, 44, 56]
[56, 44, 25, 20, 11, 10]

<class 'list_reverseiterator'>
[56, 44, 25, 11, 20, 10]

<class 'zip'>

<class 'enumerate'>
((1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6))

False
True

True

('a', 1)
('b', 2)
('c', 3)
('d', 4)

[1, 3, 5, 7, 9]

['HELLOW', 'BABY', 'WORLD']

例题

递归函数计算阶乘
def fac(n):
    if n==1:
        return 1
    else:
        return n*fac(n-1)
n=eval(input("请输入要计算到几的阶乘"))
print(f"{n}的阶乘等于{fac(n)}")

代码演示

请输入要计算到几的阶乘5
5的阶乘等于120

斐波拉契数列
#第一项和第二项为1,其他项为前两项的和
def fac(n):
    if n==1 or n==2:
        return 1
    else:
        return fac(n-1)+fac(n-2)
for i in range(1,10):
    print("第{1}个的斐波拉契数列的数字为{0}".format(fac(i),i))

代码演示

第1个的斐波拉契数列的数字为1
第2个的斐波拉契数列的数字为1
第3个的斐波拉契数列的数字为2
第4个的斐波拉契数列的数字为3
第5个的斐波拉契数列的数字为5
第6个的斐波拉契数列的数字为8
第7个的斐波拉契数列的数字为13
第8个的斐波拉契数列的数字为21
第9个的斐波拉契数列的数字为34

最大公倍数和最小公约数
def gcd(m,n):
    if m>n:
        temp=n
    else:
        temp=m
    for i in range(1,temp+1):
        if((m%i==0) and (n%i==0)):
            gcd=i
    return gcd
def lcm(m,n):
    if m>n:
        temp=n
    else:
        temp=m
    for i in range(1,temp+1):
        if((m%i==0) and (n%i==0)):
            lcm=i
    result=m*n/lcm
    return result

num1=eval(input("请输入第一个整数"))
num2=eval(input("请输入第二个整数"))
print(num1,"和",num2,"的最大公约数是",gcd(num1,num2))
print(num1,"和",num2,"的最小公倍数是",lcm(num1,num2))

代码演示

请输入第一个整数20
请输入第二个整数10
20 和 10 的最大公约数是 10
20 和 10 的最小公倍数是 20.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值