python函数作用域_八、python函数调用/作用域

一、函数的相互调用

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'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值