python函数传入对象 python 把值传入函数

在python中导入模块中的对象有哪几种方式

1、导入整个模块:

创新互联公司主要从事成都网站设计、网站建设、外贸网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务龙马潭,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

一般格式为:

import

模块1[模块2[,...]]

模块名就是程序文件的前缀,不含.py,可一次导入多个模块,导入模块后,调用模块中的函数或类时,需要以模块名为前缀,这样代码读起来更容易理解。

例:

import

math

math.sin(0.5)

0.4794255

2、与form联用导入整个模块:

一般格式为:

form

模块名

import*

这种方式导入模块后,调用模块中的函数或类,仅使用函数名或类名,代码简洁,但可读性差,不容易理解。

例:

form

math

import*

cos(0.5)

0.8775825

3、与form联用导入一个或多个对象:

一般格式为:

form

模块名

import

对象1[,对象2[,对象...]]

这种方式只导入模块中的一个或多个对象,调用模块中的对象时,仅使用对象名

例:

form

math

import

sin,cos,exp

sin(0.5)

0.4794255

cos(0.5)

0.8775825

exp(1)

2.7182818

python如何导入函数

python的内建函数即是python自带的函数,这种函数不需要定义,并且不同的内建函数具有不同的功能,可以直接使用。

以下是部分内建函数用法及说明

1、abs(),返回数字的绝对值。

2、all(),如果集合中所有元素是true或集合为空集合,返回True。

3、any(),如果集合中有一项元素是true,返回True;空集合为False

4、ascii(), 返回一个表示对象的字符串。

5、bin(),将整数转换为前缀为“0b”的二进制字符串。

6、bool(),返回一个布尔值,即True或者之一False。

7、bytearray(),返回一个新的字节数组。

8、callable(对象)判断对象参数是否可被调用(可被调用指的是对象能否使用()括号的方法调用)

9、chr(),返回表示Unicode代码点为整数i的字符的字符串。与ord()函数相反。

推荐学习《python教程》

10、classmethod,将方法转换为类方法。

11、compile,将源代码编译为代码或AST对象。代码对象可以由exec()或执行eval()。 source可以是普通字符串,字节字符串或AST对象。

12、dic(),创建一个字典

13、divmod(a,b),将两个数作为参数,并在使用整数除法时返回由商和余数组成的一对数

14、enumerate(iterable,start = 0)

enumerate是枚举、列举的意思

对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

enumerate多用于在for循环中得到计数

15、eval,将一个字符串变为字典

16、exec(object [, globals[, locals]])exec语句用来执行储存在字符串或文件中的Python语句

17、filter(功能,可迭代)

filter函数用于过滤序列

filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

Python 的函数是怎么传递参数的

对象vs变量

在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多pythoner的一点。所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。所以,希望大家在看到一个python变量的时候,把变量和真正的内存对象分开。

类型是属于对象的,而不是变量。

这样,很多问题就容易思考了。

例如:

对象vs变量

12

nfoo = 1 #一个指向int数据类型的nfoo(再次提醒,nfoo没有类型)lstFoo = [1] #一个指向list类型的lstFoo,这个list中包含一个整数1

可更改(mutable)与不可更改(immutable)对象

对应于上一个概念,就必须引出另了另一概念,这就是可更改(mutable)对象与不可更改(immutable)对象。

对于python比较熟悉的人们都应该了解这个事实,在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。那么,这些所谓的可改变和不可改变影响着什么呢?

可更改vs不可更改

12345

nfoo = 1nfoo = 2lstFoo = [1]lstFoo[0] = 2

代码第2行中,内存中原始的1对象因为不能改变,于是被“抛弃”,另nfoo指向一个新的int对象,其值为2

代码第5行中,更改list中第一个元素的值,因为list是可改变的,所以,第一个元素变更为2。其实应该说,lstFoo指向一个包含一个对象的数组。赋值所发生的事情,是有一个新int对象被指定给lstFoo所指向的数组对象的第一个元素,但是对于lstFoo本身来说,所指向的数组对象并没有变化,只是数组对象的内容发生变化了。这个看似void*的变量所指向的对象仍旧是刚刚的那个有一个int对象的list。

如下图所示:

Python的函数参数传递:传值?引用?

对于变量(与对象相对的概念),其实,python函数参数传递可以理解为就是变量传值操作,用C++的方式理解,就是对void*赋值。如果这个变量的值不变,我们看似就是引用,如果这个变量的值改变,我们看着像是在赋值。有点晕是吧,我们仍旧据个例子。

不可变对象参数调用

12345

def ChangeInt( a ): a = 10nfoo = 2 ChangeInt(nfoo)print nfoo #结果是2

这时发生了什么,有一个int对象2,和指向它的变量nfoo,当传递给ChangeInt的时候,按照传值的方式,复制了变量nfoo的值,这样,a就是nfoo指向同一个Int对象了,函数中a=10的时候,发生什么?(还记得我上面讲到的那些概念么),int是不能更改的对象,于是,做了一个新的int对象,另a指向它(但是此时,被变量nfoo指向的对象,没有发生变化),于是在外面的感觉就是函数没有改变nfoo的值,看起来像C++中的传值方式。

可变对象参数调用

12345

def ChangeList( a ): a[0] = 10lstFoo = [2]ChangeList(lstFoo )print nfoo #结果是[10]

当传递给ChangeList的时候,变量仍旧按照“传值”的方式,复制了变量lstFoo 的值,于是a和lstFoo 指向同一个对象,但是,list是可以改变的对象,对a[0]的操作,就是对lstFoo指向的对象的内容的操作,于是,这时的a[0] = 10,就是更改了lstFoo 指向的对象的第一个元素,所以,再次输出lstFoo 时,显示[10],内容被改变了,看起来,像C++中的按引用传递。

python函数调用的参数传递

python的函数参数传递是"引用传递(地址传递)"。

python中赋值语句的过程(x = 1):先申请一段内存分配给一个整型对象来存储数据1,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中的指针类似)。

在Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉。函数  调用  会为函数局部变量生成一个新的符号表。

局部变量:作用于该函数内部,一旦函数执行完成,该变量就被回收。

全局变量:它是在函数外部定义的,作用域是整个文件。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明。

注意 :默认值在函数  定义  作用域被解析

在定义函数时,就已经执行力它的局部变量

python中不可变类型是共享内存地址的:把相同的两个不可变类型数据赋给两个不同变量a,b,a,b在内存中的地址是一样的。


名称栏目:python函数传入对象 python 把值传入函数
分享URL:http://scyanting.com/article/hejgpd.html