Python学习 第8章-函数及常用的内置函数

本章内容:

>函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用

>函数定义的语法结构

• def 函数名称(参数列表):
        函数体
     [return 返回值列表]

> 函数的调用:

  • 不带返回值的函数直接调用
  • 带返回值的函数调用之后要将结果保存到变量中

> 函数参数的类型:

  •  函数定义处的参数称为形式参数,形式参数可以定成:

        位置参数

        默认值参数

        可变参数

  • 函数调用处的参数称为实际参数,在进行参数传递时可以仍关键字参数传参或位置参数传参

> 按照变量的作用域可分:局部变量和全局变量

  • 只有一句函数体的函数可以使用匿名函数(lambda)替代
  • 递归的组成部分:递归调用与递归终止条件,可以使用i-..else结构实现
  • 常用的内置函数可分为:数据类型转换函数、数学函数、迭代器操作函数和其它函数

本章示例:

示例8-1函数的定义及调用

def get_sum(num):
    s=0
    for i in range(1,num+1):
        s+=i
    print(f'1到{num}之间的累加和为:{s}')

get_sum(10)
get_sum(100)
get_sum(1000)

示例8-2位置参数的使用

def happy_birthday(name,age):
    print('祝'+name+'生日快乐')
    print(str(age)+'岁生日快乐')


#happy_birthday('娟子姐') # TypeError: happy_birthday() missing 1 required positional argument: 'age'
#happy_birthday(18,'娟子姐') # TypeError: can only concatenate str (not "int") to str
happy_birthday('娟子姐',18)

示例8-3关键字传参的使用

def happy_birthday(name, age):
    print('祝' + name + '生日快乐')
    print(str(age) + '岁生日快乐')


happy_birthday(age=18, name='娟子姐')

# happy_birthday(age=18,name1='娟子姐') #TypeError: happy_birthday() got an unexpected keyword argument 'name1'

happy_birthday('陈梅梅', age=18)

#happy_birthday(name='陈梅梅',18) # SyntaxError: positional argument follows keyword argument

#位置传参在前,关键字传参在后

示例8-4默认值参数的使用

def happy_birthday(name='娟子姐', age=18):
    print('祝' + name + '生日快乐')
    print(str(age) + '岁生日快乐')


happy_birthday()
happy_birthday('陈梅梅')
happy_birthday(age=19)

# happy_birthday(19) #19会被赋值给变更name

def fun(a,b=20):
    pass


# def fun(a=20,b): #SyntaxError: parameter without a default follows parameter with a default
#     pass

#当位置参数和关键字参数同时存在时,应遵循 位置参数在前,默认值参数在后的原则

示例8-5可变参数的使用

def fun(*para):
    print(type(para))
    for item in para:
        print(item)


fun(10,20,30,40)
fun(10)
fun(20,30)
fun([11,22,33,44])
#调用时,参数前加一颗星,将列表进行解包
fun(*[11,22,33,44])


def fun2(**kwpara):
    print(type(kwpara))
    for key,value in kwpara.items():
        print(key,'-------',value)


fun2(name='娟子姐',age=18,height=170)
d={'name':'娟子姐','age':18,'height':170}
# fun2(d) # TypeError: fun2() takes 0 positional arguments but 1 was given

fun2(**d)

示例8-6函数返回值的使用

def calc(a,b):
    print(a+b)

calc(10,20)
print(calc(1,2))

def calc2(a,b):
    s=a+b
    return s

print('-'*10)
get_s=calc2(1,2)
print(get_s)

get_s2=calc2(calc2(1,2),3)
print(get_s2)

def get_sum(num):
    s=0
    odd_sum=0
    even_sum=0
    for i in range(1,num+1):
        if i%2!=0:
            odd_sum+=i
        else:
            even_sum+=i
        s+=i
    return odd_sum,even_sum,s

result=get_sum(10)
print(type(result))
print(result)


a,b,c=get_sum(10)
print(a)
print(b)
print(c)

示例8-7局部变量的作用域

def calc(a,b):
    s=a+b
    return s

result=calc(10,20)
print(result)
# print(a,b,s)

示例8-8全局变量的使用

a=100
def calc(x,y):
    return a+x+y
print(a)
print(calc(10,20))
print('-'*30)

def calc2(x,y):
    a=200
    return a+x+y
print(calc2(10,20))
print(a)
print('-'*30)


def calc3(x,y):
    global s
    s=300
    return s+x+y

print(calc3(10,20))
print(s)

示例8-9匿名函数的使用

def calc(a, b):
    return a + b


print(calc(10, 20))

# 匿名函数
s = lambda a, b: a + b
print(type(s))
print(s(10, 20))
print('-'*30)


lst = [10, 20, 30, 40, 50]
for i in range(len(lst)):
    print(lst[i])
print('-'*30)

for i in range(len(lst)):
    result=lambda x:x[i]
    print(result(lst))

student_score=[
    {'name':'陈梅梅','score':98},
    {'name':'王一一','score':95},
    {'name':'张天乐','score':100},
    {'name':'白雪儿','score':65}
]
student_score.sort(key=lambda x:x.get('score'),reverse=True)
print(student_score)

示例8-10使用递归计算N的阶乘

def fac(n):
    if n==1:
        return 1
    else:
        return n*fac(n-1)
print(fac(5))

示例8-11斐波那契数列

def fac(n):
    if n==1 or n==2:
        return 1
    else:
        return fac(n-1)+fac(n-2)
print(fac(9))

for i in range(1,10):
    print(fac(i),end='\t')
print()

示例8-12数据类型转换函数的使用

print('非空字符串的布尔值:',bool('hello'))
print('空字符串的布尔值:',bool(''))
print('空列表的布尔值:',bool([]))
print('空列表的布尔值',bool(list()))
print('空元组的布尔值:',bool(()))
print('空元组的布尔值:',bool(tuple()))
print('空集合的布尔值:',bool(set()))
print('空字典的布尔值:',bool({}))
print('空字典的布尔值:',bool(dict()))
print('-'*30)
print('非0数值的布尔值:',bool(123))
print('整数0的布尔值:',bool(0))
print('浮点数0的布布尔值:',bool(0.0))



lst=[10,20,30]
print(type(lst),lst)
s=str(lst)
print(type(s),s)
print('-'*30,'float类型和str类型转换为int类型','-'*30)
print(int(98.7)+int('90'))
#注意事项
# print(int('98.7')) # ValueError: invalid literal for int() with base 10: '98.7'

print('-'*30,'int,str类型转换为float类型','-'*30)
print(float(90)+float('3.14'))

s='hello'
print(list(s))
seq=range(1,10)
print(tuple(seq))
print(set(seq))
print(list(seq))

示例8-13数学函数的使用

print('绝对值', abs(100), abs(-100), abs(0))
print('商和余数:', divmod(13, 4))
print('最大值:', max('hello'))
print('最大值:', max([10, 4, 56, 78, 4]))
print('最小值:', min('hello'))
print('最大值:', min([10, 4, 56, 78, 4]))


print('求和:', sum([10,34,45]))
print('x的y次幂:',pow(2,3))

print(round(3.1415926))
print(round(3.9415926))
print(round(3.1415926,2))
print(round(314.15926,-1))
print(round(314.15926,-2))

示例8-14迭代器操作函数的使用

lst=[54,56,77,4,567,34]
asc_lst=sorted(lst)
desc_lst=sorted(lst,reverse=True)
print('原列表:',lst)
print('升序:',asc_lst)
print('降序:',desc_lst)

new_lst=reversed(lst)
print(type(new_lst))
print(list(new_lst))

x=['a','b','c','d']
y=[10,20,30,40,50]
zipobj=zip(x,y)
print(type(zipobj))
# print(list(zipobj))


enum=enumerate(y,start=1)
print(type(enum))
print(tuple(enum))

lst2=[10,20,'',30]
print(all(lst2))
print(all(lst))


print(any(lst2))

print(next(zipobj))
print(next(zipobj))
print(next(zipobj))


def fun(num):
    return num%2==1
obj=filter(fun,range(10))
print(list(obj))


def upper(x):
    return x.upper()

new_lst2=['hello','world','python']
obj2=map(upper,new_lst2)
print(list(obj2))

示例8-15其它函数的使用

print(format(3.14,'20'))
print(format('hello','20'))
print(format('hello','*<20'))
print(format('hello','*>20'))
print(format('hello','*^20'))


print(format(3.1415926,'.2f'))
print(format(20,'b'))
print(format(20,'o'))
print(format(20,'x'))
print(format(20,'X'))

print('-'*40)
print(len('helloworld'))
print(len([10,20,30,40,50]))


print('-'*40)
print(id(10))
print(id('helloworld'))
print(type('hello'),type(10))


print(eval('10+30'))
print(eval('10>30'))

注:本文中的所有内容及示例均引自@Python_子木的视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值