在python中,逻辑表达式输出需要注意这几个问题:(1)and :x and y 返回的结果是决定表达式结果的值。如果 x 为真,则 y 决定结果,返回 y ;如果 x 为假,x 决定了结果为假,返回 x。(2)or :x or y 跟 and 一样都是返回决定表达式结果的值。(3)not : 返回表达式结果的“相反的值”。如果表达式结果为真,则返回false;如果表达式结果为假,则返回true。
我们提供的服务有:成都网站建设、网站设计、微信公众号开发、网站优化、网站认证、德城ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的德城网站制作公司
程序运行结果应该是
foo() called
bar() called
这个和什么语言无关吧,楼主要明白什么是函数的声明,什么是函数的调用,在def foo()函数中第一个def bar() 只是函数的声明,不会知悉的,这么说吧,所有含有def的都不会知悉,只有在函数调用的时候才会执行。
在Python语言中,可以在函数中定义函数。 这种在函数中嵌套定义的函数也叫内部函数。我们来看下面的代码:
上述代码中,定义了函数greet,在函数greet内部又定义了一个函数inner_func, 并调用该函数打印了一串字符。
我们可以看到,内部函数inner_func的定义和使用与普通函数基本相同。需要注意的是变量的作用域,在上述代码中,函数参数name对于全局函数greet是局部变量,对内部函数inner_func来说则是非局部变量。内部函数对于非局部变量的访问规则类似于标准的外部函数访问全局变量。
从这个例子我们还可以看到内部函数的一个作用,就是通过定义内部函数的方式将一些功能隐藏起来,防止外部直接调用。常见的场景是,在一个复杂逻辑的函数中,将一些小的任务定义成内部函数,然后由这个外层函数使用,这样可以使代码更为清晰,易于维护。这些内部函数只会在这个外层函数中使用,不能被其他函数或模块使用。
在Python语言中, 函数也是对象,它可以被创建、赋值给变量,或者作为函数的返回值。我们来看下面这个例子。
在上述代码中,在函数gen_greet内部定义了inner_func函数,并返回了一个inner_func函数对象。外部函数gen_greet返回了一个函数对象,所以像gen_greet这样的函数也叫工厂函数。
在内部函数inner_func中,使用了外部函数的传参greet_words(非局部变量),以及函数的参数name(局部变量),来打印一个字符串。
接下来,调用gen_greet("Hello")创建一个函数对象say_hello,紧接着调用say_hello("Mr. Zhang"),输出的结果为:Hello, Mr. Zhang!
同样的,调用gen_greet("Hi")创建一个函数对象say_hi,调用say_hello("Mr. Zhang"),输出的结果为:Hi,Tony!
我们可以发现,gen_greet返回的函数对象具有记忆功能,它能够把所需使用的非局部变量保存下来,用于后续被调用的时候使用。这种保存了非局部变量的函数对象被称作闭包(closure)。
那么闭包是如何实现的呢?其实并不复杂,函数对象中有一个属性__closure__,它就是在创建函数对象时用来保存这些非局部变量的。
__closure__属性是一个元组或者None类型。在上述代码中,我们可以通过下面方式查看:
函数的嵌套所实现的功能大都可以通过定义类的方式来实现,而且类是更加面向对象的代码编写方式。
嵌套函数的一个主要用途是实现函数的装饰器。我们看下面的代码:
在上述代码中,logger函数返回函数with_logging,with_logging则是打印了函数func的名称及传入的参数,然后调用func, 并将参数传递给func。其中的@wraps(func)语句用于复制函数func的名称、注释文档、参数列表等等,使得with_logging函数具有被装饰的函数func相同的属性。
代码中接下来用@logger对函数power_func进行修饰,它的作用等同于下面的代码:
可见,装饰器@符其实就是上述代码的精简写法。
通过了解了嵌套函数和闭包的工作原理,我们在使用过程中就能够更加得心应手了。
保留字是 python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。
Python 保留字一览表
需要注意的是,由于 Python 是严格区分大小写的 ,保留字也不例外。所以,我们可以说 if 是保留字,但 IF 就不是保留字。
简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。
python 中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:
(1) 标识符是由字符(A~Z 和 a~z)、下划线和数字组成,但第一个字符不能是数字。
(2) 标识符不能和 Python 中的保留字相同。有关保留字,后续章节会详细介绍。
(3) Python中的标识符中,不能包含空格、@、% 以及 $ 等特殊字符
(4) 在 Python 中,标识符中的字母是 严格区分大小写 的,也就是说,两个同样的单词,如果大小格式不一样,多代表的意义也是完全不同的。比如说,下面这 3 个变量之间,就是完全独立、毫无关系的,它们彼此之间是相互独立的个体。
(5) Python 语言中,以下划线开头的标识符有特殊含义,例如:
因此,除非特定场景需要,应避免使用以下划线开头的标识符。
那我们再次熟悉下Python常用的一些命名规范:
三、 内置函数
ptthon 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块
表 为 Python 3.x内置函数
def a():
def b():
print "b"
print "a"
return b
x=a()
a
x()
b
python系统提供了下面常用的函数:
1. 数学库模块(math)提供了很多数学运算函数;
2.复数模块(cmath)提供了用于复数运算的函数;
3.随机数模块(random)提供了用来生成随机数的函数;
4.时间(time)和日历(calendar)模块提供了能处理日期和时间的函数。
注意:在调用系统函数之前,先要使用import 语句导入 相应的模块
该语句将模块中定义的函数代码复制到自己的程 序中,然后就可以访问模块中的任何函数,其方 法是在函数名前面加上“模块名.”。
希望能帮到你。