对python函数的认识的简单介绍

python关于函数

python帮助中有对__main__的说明。

创新互联一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!为您提供网站建设、做网站、成都网页设计、微信小程序定制开发、成都网站开发、成都网站制作、成都软件开发、成都app软件开发是成都本地专业的网站建设和网站设计公司,等你一起来见证!

每个文件(模块)都可以任意写一些没有缩进的代码,并且在载入时自动执行,为了区分主执行文件还是被调用的文件,Python引入了一个变量__name__,当文件是被调用时,__name__的值为模块名,当文件被执行时,__name__为'__main__'。这个特性,为测试驱动开发提供了极好的支持,可以在每个模块中写上测试代码,这些测试代码仅当模块被Python直接执行时才会运行,代码和测试完美的结合在一起。

如何理解“python中函数是一等公民”?

单纯的理解“python中的函数是一等公民”这句话,可能包含几层意思:

正确的理解是:第1点和第2点,不包含第3点的意思。

python中的函数是一等公民,重点想表述的是: 在python世界人人平等 。

人人平等的世界,至少应该包含两层意思:1. 身份地位平等; 2. 行使的权利平等。

打印结果是:

从上面的打印结果中可以看出:

1.Python 程序中的所有数据都是某个类的实例,因而是一个对象;

2.类本身也是一个对象。int, float, str, list, dict, set, fuction, module, NoneType, object, type等,这些类都是type类的实例,也是一个对象;

3.object类是所有类的基类

4.object是顶级父类

函数function和其他公民一样,他们的都有一个共同的身份:对象 。

在c++和java里,数据是数据,动作是动作,他俩的结合是类(class)。对于python,数据是数据,动作也可以是数据,这个牛逼的数据叫做对象object。

对于函数function来讲,既可以安静的做一个数据,又可以优雅的执行动作。

Python 官方文档里这样解释 对象(object) 的含义:Python 中的对象是对数据的抽象,Python 程序中所有数据都是由对象或者对象间的关系来表示的。每个对象都有各自的编号、类型和值。

两个祖先(a和b)占了相邻的两块内存,一个可以与它的“后代”共用内存,一个却只能让“后代”另立门户;当它们走完自己的生命周期后,b会马上被当垃圾回收,内存地址遗产被剥夺,然而a却形灭而实存,荫庇后世。

Python为这些对象倾斜资源,也就是为某种阶层固化提供了合法性。划分的依据是因为它们比较常用,共用内存就意味着减少开支,提高内存使用效率。

这就是Python有趣的地方了,一面是全体公民,一面是特权种族,组成了看似矛盾的二元对立结构。

参考:

python中函数的作用

Python 函数定义以及参数传递

1.函数定义

#形如def func(args...):

doSomething123

以关键字def 开头,后面是函数名和参数下面是函数处理过程。

举例:

def add( a, b ):

return a+b12

参数可以设定默认值,如:

def add( a, b=10 ): #注意:默认值参数只会运算一次

return a+b12

默认值参数只会运算一次是什么意思?

def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存

b.append(a) return b

print(func(1))#向默认的空列表里加入元素1 ,默认列表里已经是[1]print(func(2))#向默认的列表里加入元素2,默认列表里已经是[1,2]print(func(3,[]))#向b指向的空列表里加入元素1 ,默认列表里还是[1,2]print(func(4))#向默认的列表里加入元素4,默认列表里已经是[1,2,4]'''

结果:

[1]

[1, 2]

[3]

[1, 2, 4]

'''12345678910111213141516

这下明白为什么默认参数只计算一次了吧,函数参数不传递时默认值总是指向固定的内存空间,就是第一次计算的空间。

2.参数传递

def func(a, b):

print('a=%d, b=%d' % (a,b) )12

在使用函数时可以如下方式,结果都是相同的

func(10,20) #不使用参数名,需要按参数顺序传递func(a=10,b=20) #使用参数名可以不按顺序传递func(b=20,a=10)#结果:a=10, b=20a=10, b=20a=10, b=201234567

如果函数定义形式如下方式:

def func(*args): #这种定义会把传递的参数包成元组

print(args,type(args))

func(10,20)#结果:#(10, 20) class 'tuple'1234567

举一个和上述过程相反的例子:

def func(a,b):

print('a=%d, b=%d' % (a,b) )

a = (10, 20)

func(*a) #在调用函数使用`*`则会把元组解包成单个变量按顺序传入函数#结果:a=10, b=20123456

总结:*号在定义函数参数时,传入函数的参数会转换成元组,如果 *号在调用时则会把元组解包成单个元素。

另一种定义:

def func(**kw):#使用**定义参数会把传入参数包装成字典dict

print(kw, type(kw) )

func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式#结果:{'b': 20, 'a': 10} class 'dict'12345

相反的例子:

def func(a,b):

print('a=%d, b=%d' % (a,b) )

d = {'a':10, 'b':20 }

func(**d) #在调用时使用**会把字典解包成变量传入函数。12345

def func(*args, **kw):#这种形式的定义代表可以接受任意类型的参数

print(args,kw )12

总结:**号在定义函数参数时,传入函数的参数会转换成字典,如果 **号在调用时则会把字典解包成单个元素。

lambda表达式

lambda表达式就是一种简单的函数

形如 f = lambda 参数1,参数2: 返回的计算值

例如:

add = lambda x,y: x+y

print(add(1,2))'''

结果:3

'''12345


网页标题:对python函数的认识的简单介绍
标题网址:http://abwzjs.com/article/dosggch.html