函数参数调用 4.1

目录

四、掌握变量的作用域

✍变量的作用域

五、熟悉匿名函数lambda的使用

✍lambda函数

✍递归函数

✍斐波那契数列

六、熟悉常用的内置函数

✍数据类型转换函数

✍常用的数学函数

✍常用的迭代器操作函数

✍常用的其他内置函数

总结


四、掌握变量的作用域

✍变量的作用域

指变量起作用的范围作用的大小可分为局部变量和全局变量

局部变量全局变量
定义:在函数定义处的参数和函数内部定义的变量定义:在函数外定义的变量或函数内部使用global关键字修饰的变量
作用范围:仅在函数内部,函数执行结束,局部变量的生命周期也结束作用范围:整个程序,程序运行结束,全局变量的生命周期才结束


# 局部变量
def calc(a,b):
    s=a+b
    return s

result=calc(10,20) 
print(result)
# print(a,b,s) # a.b是函数的参数,参数是局部变量,s函数中定义的使用,局部变量

# 全局变量
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 # a是局部变量,当全局变量和局部变量的名称相同时,局部变量的优先级更高。

print(calc2(10,20))
print(a)
print('-'*30)


def calc3(x,y):
    global s # s是在函数中定义的变量,但是使用了global关键字声明,这个变量s变成了全局变量
    s=300 # 声明和赋值,必须分开执行
    return s+x+y

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


五、熟悉匿名函数lambda的使用

✍lambda函数

是指没有名字的函数,这种函数只能使用一次,一般是在函数的函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化。

语法结构:

result=lambda参数列表:表达式

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

print(calc(10,20))

# 匿名函数
s=lambda a,b:a+b # s 表示就是一个匿名函数
print(type(s)) # <class 'function'>
# 调用匿名函数
print(s(10,20))
print('-'*30)
# 列表的正常取值操作
lst=[10,20,30,40,50]
for i in range(len(lst)):
    print(lst[i])
print()

for i in range(len(lst)):
    result=lambda x:x[i] # 根据索引取值,result类型是function ,x是形式参数
    print(result(lst)) # lst实际参数


#
student_scores=[
    {'name':'蟹老板','score':98},
    {'name':'痞老板','score':95},
    {'name':'章鱼哥','score':100},
    {'name':'海绵宝宝','score':90}

]
# 对列表进行排序,排序的规则 是字典只的成绩
student_scores.sort(key=lambda x:x.get('score'),reverse=True) # 降序
print(student_scores)

✍递归函数

  • 在一个函数的函数体内调用该函数本身,该函数就是递归函数。
  • 一个完整的递归操作由两部分组成,一部分是递归调用,一部分是递归终止条件,一般可使用if-else结构来判断递归的调用和递归的终止。

N*fac(N-1)

def fac(n): # n的阶乘 N!=N*(N-1)!.......1!=1
    if n==1:
        return 1
    else:
        return n*fac(n-1)  # 自己调用自己

print(fac(5)) 

✍斐波那契数列

斐波那契数列又称黄金分割线,是由数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、......,从第三项开始,每项都等于前两项之和。

公式为:f(n)=f(n-1)+f(n-2)

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

print(fac(9)) # 第9位上的数字

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

六、熟悉常用的内置函数

✍数据类型转换函数

函数名称描述说明
bool(obj)

获取指定对象obj的布尔值

str(obj)将指定对象obj转成字符串类型
int(x)将x转成int类型
float(x)将x转成float类型
list(sequence)将序列转成列表类型
tuple(sequence)将序列转成元组类型
set(sequence)将序列转成集合类型

✍常用的数学函数

函数名称描述说明
abs(x)获取x的绝对值
divmod(x,y)获取x与y的商和余数
max(sequence)获取sequence的最大值
min(sequence)获取sequence的最小值
sum(iter)对可迭代对象进行求和运算
pow(x,y)获取x的y次幂
round(x,d)对x进行保留d位小数,结果四舍五入

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)) # round函数只有一个参数,保留整数
print(round(3.9415926)) # 4
print(round(3.1415926,2)) # 3.14 ,2表示的是保留两位小数
print(round(314.15926,-1)) # 310 ,-1位,个数进行四舍五入

print(round(314.15926,-2))  #300 ,-2,十位进行四舍五入

✍常用的迭代器操作函数

函数名称描述说明
sorted(iter)对可迭代对象进行排序
reversed(sequence)反转序列生成新的迭代器对象
zip(iter1,iter2)将iter1与iter2打包成元组并返回一个可迭代的zip对象
enumerate(iter)根据iter对象创建一个enumerate对象
all(iter)判断可迭代对象iter中所有元素的布尔值是否都为True
any(iter)判断可迭代对象iter中所有元素的布尔值是否都为False
next(iter)获取迭代器的下一个元素
filter(function,iter)通过指定条件过滤序列并返回一个迭代器对象
map(function,iter)通过函数function对可迭代对象iter的操作返回一个迭代器对象

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

# (2)reversed 反向
new_lst=reversed(lst)
print(type(new_lst)) # <class 'list_reverseiterator'>
print(list(new_lst))

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

# (4)enumerate
enum=enumerate(y,start=1)
print(type(enum)) # <class 'enumerate'>
print(tuple(enum))

# (5)all
lst2=[10,20,'',30]
print(all(lst2)) # False ,空字符串的布尔值是False
print(all(lst)) # True

# (6)any
print(any(lst2)) # True

# (7)
print(next(zipobj))
print(next(zipobj))
print(next(zipobj))

def fun(num):
    return num%2==1


obj=filter(fun,range(10)) # 将range(10),0-9的整数,都执行一次fun操作
print(list(obj)) # [1, 3, 5, 7, 9]

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


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

✍常用的其他内置函数

函数名称描述说明
format(value,format_spec)将value以format_spec格式进行显示
len(s)获取s的长度或s元素的个数
id(obj)获取对象的内存地址
type(x)获取x的数据类型
eval(s)执行s这个字符串所展示的python代码

print(format(3.14,'20')) # 数值型默认右对齐
print(format('hello','20')) # 字符串默认左对齐
print(format('hello','*<20')) # <左对齐  *表示填充符, 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('-'*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'))


总结

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

✍函数定义的语法结构

def 函数名称(参数列表):

      函数体

      [return返回值列表]

✍函数的调用:

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

✍函数参数的类型

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

  • 位置参数
  • 默认值参数
  • 可变参数

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

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

✍只有一句函数体的函数可以使用匿名函数(lambda)替代

✍递归的组成部分:递归调用与递归终止条件,可以使用if......else结构实现

✍常用的内置函数可分为:数据类型转换函数、数学函数、迭代器操作函数和其他函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FANGNG20

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值