一、函数的相互调用
defeat(name,food):print('{}喜欢吃的食物:{}'.format(name,food))defcongratulate(offer_name,money):'''庆祝拿到offer'''
print('{}拿到了{}元的offer'.format(offer_name,money))
eat(offer_name,'小龙虾')
congratulate('zjx',8000)'''zjx拿到了8000元的offer
zjx喜欢吃的食物:小龙虾'''
注意:调用函数的时候必须先定义
函数不要相互调用,相互调用会导致递归错误,内存有限,一直循环,内存会爆掉
函数不要自己调用自己,否则也会导致递归错误
1)调用函数的时候必须先定义
defcongratulate(offer_name,money):'''庆祝拿到offer'''
print('{}拿到了{}元的offer'.format(offer_name,money))
eat(offer_name,'小龙虾')
congratulate('zjx',8000)defeat(name,food):print('{}喜欢吃的食物:{}'.format(name,food))'''zjx拿到了8000元的offer
NameError: name 'eat' is not defined'''
3)函数不要自己调用自己
defget_money(date):print('去讨薪')
get_money(date)print(get_money(8)) #死循环
2)函数不要相互调用
defget_money(date):print(date)
get_name('yuz')defget_name(name):print(name)
get_money(7)
二、函数的作用域
全局变量:整个文件都可以共用的,在函数体外面的
局部变量:在函数体这个局部里面
defadd(a,b):
c= a +bprint('函数里面的c={}'.format(c))returnc
c= 4
print('函数外面的c={}'.format(c))
add(5,8)'''函数外面的c=4
函数里面的c=13'''
全局能获取局部变量吗?-------不能
全局能修改局部变量吗?--------不能
局部作用域能获取全局变量吗?--------能
局部作用域能修改全局变量吗?------能(前提是加global)
1) 全局作用域不能获取局部变量
defadd(a,b):
c= a +b
c+= 5
returnc
c= 4add(5,8)print(c) #4
2)局部作用域能获取全局变量
c= 8
defadd(a,b):return a+b+cprint(add(2,4)) #14
3)局部作用域修改全局变量
c= 4
defadd(a,b):globalc
c= c + 4
print(c)
add(2,4)print('最后的c是{}'.format(c)) #8
注意:不加global 表明是全局变量,局部是不能修改全局变量的
如果想在局部去修改全局变量,加global 表明这是一个全局变量
三、为什么要使用函数
当你发现你在复制粘贴相同的或者类似的代码的时候,那么,极有可能你需要定义一个函数,会把同样的一段代码存储到函数当中,这样的过程就是封装
封装成函数—》把一段代码存储到函数当中
函数的作用:存储一段程序(有长有短),为了重复利用,不需要复制粘贴了
四、内置函数
abs():返回数字的绝对值
dict():用于创建一个字典
min():返回给定参数的最小值,参数可以为序列
max():返回给定参数的最大值,参数可以为序列
sorted():对所有可迭代的对象进行排序操作
input():接收一个标准输入数据,返回为string类型
eval():用来进行一个字符串表达式,并返回表达式的值
int():用于将一个字符串或数字转换为整型
open():用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError
str():将对象转化为适于人阅读的形式
bool():用于将给定参数转换为布尔类型,如果没有参数,返回False
sum():对序列进行求和计算
float():用于将整数和字符串转换成浮点数
print():用于打印输出,最常见的一个函数
tuple():将可迭代序列转换为元组
format():格式化字符串的函数,增强字符串格式化的功能
len():返回对象长度或项目个数
type():如果只有第一个参数则返回对象的类型,三个参数返回新的类型对象
list():用于将元组或字符串转换为列表
range():返回的是一个可迭代对象(类型是对象),而不是列表类型,所以打印的时候不会打印列表
set():创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
enumerate():用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中
不是内置函数:isdigtal():检测字符串是否只由数字组成,返回为布尔类型
sort–排序,没有返回值,只是修改了原列表
lst = [1,4,7,2,9,8]
new_lst=lst.sort()print(new_lst) #sort()函数没有返回值
print(lst)'''None [1, 2, 4, 7, 8, 9]'''
sorted()返回的是一个新的列表,原列表没有变化
lst = [1,4,7,2,9,8]print(sorted(lst))print(lst)'''[1, 2, 4, 7, 8, 9]
[1, 4, 7, 2, 9, 8]'''
enumerate() 枚举,可以同时获取索引和值,输出形式为元组
lst = [1,5,3,7,8,2]for i inenumerate(lst):print(i)'''(0, 1)
(1, 5)
(2, 3)
(3, 7)
(4, 8)
(5, 2)'''
enumerate() 枚举,可以用两个变量来接收
lst = [1,5,3,7,8,2]for i,v in enumerate(lst): #两个值就是元组的解包
print(i,v)'''0 1
1 5
2 3
3 7
4 8
5 2'''
eval() 执行一个字符串表达式,并返回表达式的值
a = '1 + 2'
print(a)print(eval(a))'''1 + 2
3'''