快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

pythone函数 python里的函数

python 函数参数的类型

1. 不同类型的参数简述

峡江网站建设公司成都创新互联公司,峡江网站设计制作,有大型网站制作公司丰富经验。已为峡江1000多家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的峡江做网站的公司定做!

#这里先说明python函数调用得语法为:

复制代码

代码如下:

func(positional_args,

keyword_args,

*tuple_grp_nonkw_args,

**dict_grp_kw_args)

#为了方便说明,之后用以下函数进行举例

def test(a,b,c,d,e):

print a,b,c,d,e

举个例子来说明这4种调用方式得区别:

复制代码

代码如下:

#

#positional_args方式

test(1,2,3,4,5)

1 2 3 4 5

#这种调用方式的函数处理等价于

a,b,c,d,e = 1,2,3,4,5

print a,b,c,d,e

#

#keyword_args方式

test(a=1,b=3,c=4,d=2,e=1)

1 3 4 2 1

#这种处理方式得函数处理等价于

a=1

b=3

c=4

d=2

e=1

print a,b,c,d,e

#

#*tuple_grp_nonkw_args方式

x = 1,2,3,4,5

test(*x)

1 2 3 4

5

#这种方式函数处理等价于

复制代码

代码如下:

a,b,c,d,e = x

print

a,b,c,d,e

#特别说明:x也可以为dict类型,x为dick类型时将键传递给函数

y

{'a': 1,

'c': 6, 'b': 2, 'e': 1, 'd': 1}

test(*y)

a c b e d

#

#**dict_grp_kw_args方式

y

{'a': 1, 'c': 6, 'b': 2, 'e': 1, 'd': 1}

test(**y)

1 2 6

1 1

#这种函数处理方式等价于

a = y['a']

b = y['b']

... #c,d,e不再赘述

print

a,b,c,d,e

2.

不同类型参数混用需要注意的一些细节

接下来说明不同参数类型混用的情况,要理解不同参数混用得语法需要理解以下几方面内容.

首先要明白,函数调用使用参数类型必须严格按照顺序,不能随意调换顺序,否则会报错. 如 (a=1,2,3,4,5)会引发错误,;

(*x,2,3)也会被当成非法.

其次,函数对不同方式处理的顺序也是按照上述的类型顺序.因为#keyword_args方式和**dict_grp_kw_args方式对参数一一指定,所以无所谓顺序.所以只需要考虑顺序赋值(positional_args)和列表赋值(*tuple_grp_nonkw_args)的顺序.因此,可以简单理解为只有#positional_args方式,#*tuple_grp_nonkw_args方式有逻辑先后顺序的.

最后,参数是不允许多次赋值的.

举个例子说明,顺序赋值(positional_args)和列表赋值(*tuple_grp_nonkw_args)的逻辑先后关系:

复制代码

代码如下:

#只有在顺序赋值,列表赋值在结果上存在罗辑先后关系

#正确的例子1

x =

{3,4,5}

test(1,2,*x)

1 2 3 4 5

#正确的例子2

test(1,e=2,*x)

1 3 4 5 2

#错误的例子

test(1,b=2,*x)

Traceback (most recent call

last):

File "stdin", line 1, in module

TypeError: test()

got multiple values for keyword argument 'b'

#正确的例子1,处理等价于

a,b = 1,2 #顺序参数

c,d,e = x #列表参数

print a,b,c,d,e

#正确的例子2,处理等价于

a = 1 #顺序参数

e = 2 #关键字参数

b,c,d = x #列表参数

#错误的例子,处理等价于

a = 1 #顺序参数

b = 2 #关键字参数

b,c,d = x

#列表参数

#这里由于b多次赋值导致异常,可见只有顺序参数和列表参数存在罗辑先后关系

函数声明区别

理解了函数调用中不同类型参数得区别之后,再来理解函数声明中不同参数得区别就简单很多了.

1. 函数声明中的参数类型说明

函数声明只有3种类型, arg, *arg , **arg 他们得作用和函数调用刚好相反.

调用时*tuple_grp_nonkw_args将列表转换为顺序参数,而声明中的*arg的作用是将顺序赋值(positional_args)转换为列表.

调用时**dict_grp_kw_args将字典转换为关键字参数,而声明中**arg则反过来将关键字参数(keyword_args)转换为字典.

特别提醒:*arg

和 **arg可以为空值.

以下举例说明上述规则:

复制代码

代码如下:

#arg, *arg和**arg作用举例

def

test2(a,*b,**c):

print a,b,c

#

#*arg 和

**arg可以不传递参数

test2(1)

1 () {}

#arg必须传递参数

test2()

Traceback (most recent call last):

File "stdin", line 1,

in module

TypeError: test2() takes at least 1 argument (0 given)

#

#*arg将顺positional_args转换为列表

test2(1,2,[1,2],{'a':1,'b':2})

1 (2, [1, 2], {'a': 1, 'b': 2})

{}

#该处理等价于

a = 1 #arg参数处理

b = 2,[1,2],{'a':1,'b':2} #*arg参数处理

c =

dict() #**arg参数处理

print a,b,c

#

#**arg将keyword_args转换为字典

test2(1,2,3,d={1:2,3:4}, c=12, b=1)

1 (2, 3) {'c': 12, 'b': 1, 'd': {1: 2, 3:

4}}

#该处理等价于

a = 1 #arg参数处理

b= 2,3 #*arg参数处理

#**arg参数处理

c =

dict()

c['d'] = {1:2, 3:4}

c['c'] = 12

c['b'] = 1

print

a,b,c

2. 处理顺序问题

函数总是先处理arg类型参数,再处理*arg和**arg类型的参数.

因为*arg和**arg针对的调用参数类型不同,所以不需要考虑他们得顺序.

复制代码

代码如下:

def test2(a,*b,**c):

print

a,b,c

test2(1, b=[1,2,3], c={1:2, 3:4},a=1)

Traceback (most

recent call last):

File "stdin", line 1, in

module

TypeError: test2() got multiple values for keyword argument

'a'

#这里会报错得原因是,总是先处理arg类型得参数

#该函数调用等价于

#处理arg类型参数:

a = 1

a = 1

#多次赋值,导致异常

#处理其他类型参数

...

print a,b,c

def foo(x,y):

... def bar():

... print

x,y

... return bar

...

#查看func_closure的引用信息

a =

[1,2]

b = foo(a,0)

b.func_closure[0].cell_contents

[1, 2]

b.func_closure[1].cell_contents

b()

[1, 2] 0

#可变对象仍然能被修改

a.append(3)

b.func_closure[0].cell_contents

[1, 2, 3]

b()

[1, 2, 3] 0

python 定义函数

params

就是(5, 5)

(5,) * 2 ,就是2个5的元组,乘号可以理解成相加。"*" * 30就是30个“*"的字符串

*params作为参数,前面的*号就是把params元组分解成元素的意思,这样就分开成为2个参数了。实际上传递给了x,y

于是就执行了power(5,5)

python中如何调用自己写的函数

在python中,除了调用下载的扩展库之外,还可以自定义函数,方便自己。把基础模块放在固定文件夹(或相对固定文件夹),使用sys.append(r’自定义的模块路径’)实例如下:

1、在E:pycharm新建hello.py实现基础功能函数(定义一个hello()函数)

2、 调用自定义的函数

3、 运行结果为:

更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python中如何调用自己写的函数的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

python之字符串内置函数

1. 字符串字母处理

2. 字符串填充

str.ljust(width, fillchar)、str.center(width, fillchar)、str.rjust(width, fillchar)

返回一个指定的宽度 width 「居左」/「居中」/「居右」的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。

3,字符串计数

str.count(sub, start, end)

#统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

start, end遵循**“左闭右开”**原则。

4. 字符串位置

str.endswith(suffix, start, end)和str.startswith(substr, beg, end)

#判断字符串是否以指定后缀结尾/开头,如果以指定后缀「结尾」/「开头」返回 True,否则返回 False。

5. 字符串查找

6. 字符串判断

7. 字符串拼接

str.join() #将序列中的元素以指定的字符连接生成一个新的字符串。

s1 = "-" s2 = "" seq = ("r", "u", "n", "o", "o", "b")

# 字符串序列 print (s1.join( seq )) print (s2.join( seq )) r-u-n-o-o-b runoob

8. 统计字符串长度

str.len() #返回对象(字符、列表、元组等)长度或项目个数。

9. 去除字符两侧空格

str.lstrip()、str.rstrip()、str.strip() #截掉字符串「左边」/「右边」/「左右」两侧的空格或指定字符。

str0 = ' Hello World!' str0.lstrip() 'Hello World!' str1 = 'aaaa Hello World!' str1.lstrip('a') ' Hello World!'

10. str.maketrans(intab, outtab)和str.translate(table)

str.maketrans()创建字符映射的转换表

str.maketrans()根据参数table给出的表转换字符串的字符。

str.maketrans()传入的也可以是字典

tab = {'e': '3', 'o': '4'} trantab = str.maketrans(tab) str0.translate(trantab) 'H3ll4 W4rld!'

11. 字符串替换

str.replace(old, new, max)

12. 字符分割

str.split(str, num)

13. 字符填充

str.zfill(width)

返回指定长度的字符串,原字符串右对齐,前面填充0。

python except中的e是什么意思

except 语句跟着两个东西,前面是异常的类型,后面的是 异常对象

e 异常实例


本文题目:pythone函数 python里的函数
文章来源:http://6mz.cn/article/docesho.html

其他资讯