函数中的声明和变量的定义

本文详细探讨了Python中函数的声明与定义、前向引用、函数属性、内部/内嵌函数以及变量作用域等概念。通过实例解析了函数的声明与定义的统一性,强调了前向引用的规则,并介绍了如何获取和设置函数属性。同时,文章还讲解了内部函数的创建和闭包的概念,展示了函数在打印图形和数学计算中的应用。最后,深入讨论了全局变量和局部变量的区别,以及如何通过`global`语句正确地操作全局变量。
摘要由CSDN通过智能技术生成

声明与定义比较

​ 在某些编程语言里,函数声明和函数定义区分开的,一个函数声明包括提供对函数名,参数的名字(传统上还有参数的类型),但不必给出函数的任何代码,具体的代码通常属于函数定义的范畴。
​ 在声明和定义有区别的语言中,往往是因为函数的定义可能和其声明放在不同的文件中。python将这两者视为一体,函数的子句由声明的标题行以及随后的定义体组成的。

前向引用

和其他高级语言类似python也不允许在函数未声明之前,对其进行引用或者调用。
我们下面给出几个例子来看一下:

def func():
	print("in func()")
	bar()
print(func())
#会报错

修改:现在定义函数bar()在函数func()前给出bar()声明:

#定义函数的前后顺序都可以!
def func():
	print("in func()")
	bar()
def bar():
	print("in bar()")
func()

现在我们可以安全的调用func(),而不会出现任何问题:

func()
in func()
in bar

事实上,我们甚至可以在函数bar()前定义函数func():

def func():
	print("in func()")
	bar()
def bar():
	print("in bar()")

Amazing依然可以很好的运行,不会有前向引用的问题:

func()
in func()
in bar
这段代码是正确的因为即使(在 foo()中)对 bar()进行的调用出现在 bar()的定义之前,但 foo()本身不是在 bar()声明之前被调用的。换句话说,我们声明 foo(),然后再声明bar(),接着调用 foo(),但是到那时,bar()已经存在了,所以调用成功。

注意 ,foo()在没有错误的情况下成功输出了’in foo()’。名字错误是当访问没有初始化的标识符时才产生的异常 。

函数属性

你可以获得每个 pyhon 模块,类,和函数中任意的名字空间。你可以在模块 foo 和 bar 里都有名为 x 的一个变量,,但是在将这两个模块导入你的程序后,仍然可以使用这两个变量。所以,即使在两个模块中使用了相同的变量名字,这也是安全的,因为句点属性标识对于两个模块意味了不同的命名空间,比如说,在这段代码中没有名字冲突:

import foo, bar
print(foo.x + bar.x) 

函数属性是 python 另外一个使用了句点属性标识并拥有名字空间的领域。

def foo():
	'foo()-- properly created doc string'

def bar():
	pass

bar.__doc__='Oops,forgot the doc str above'
bar.version =0.1

#按住shift在空白处打开 执行时在中间加-i
PS C:\Users\asus\Desktop\pythondemo测试\小巷> python -i band.py
>>> foo.__doc__
'foo()-- properly created doc string'
>>>

​ 上面的 foo()中,我们以常规地方式创建了我们的文档字串,比如, 在函数声明后第一个没有赋值的字串。当声明
bar()时, 我们什么都没做, 仅用了句点属性标识来增加文档字串以及其他属性。我们可以接着任意地访问属性。下面是一个使用了交互解释器的例子。(你可能已经发现,用内建函
数 help()显示会比用__doc__属性更漂亮,但是你可以选择你喜欢的方式)

>>> help(foo)
Help on function foo in module __main__:

foo(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值