码迷,mamicode.com
首页 > 其他好文 > 详细

函数与对象

时间:2018-04-13 18:01:03      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:map   psd   wip   ttl   pex   列表   去除   svg   整数   

1、函数

Python中函数必须先声明,然后才能调用它

Python使用def声明一个函数,完整函数由函数名、函数参数及函数体组成

def <函数名> (参数列表)

  <函数语句>

  return <返回值>

参数列表、返回值都不是必须的,return后无返回值的和无return语句的函数都会返回None

 

默认值参数

def <函数名>(参数 = 默认值):

  <语句>

若果既有无默认值参数,又有默认值参数,则必须先声明无默认值参数

 

命名(关键字)参数

Python中参数传递默认是按照声明函数时参数的位置顺序进行传递的,即位置参数

调用函数时可明确声明要传递的参数的名称即可

调用方法时,按顺序传递的参数要位于命名参数之前,且不能有重复的情况

 

可变参数传递

在自定义函数时,如果在参数名前加一个*,则表示该参数就是一个可变长参数。在调用该函数时,若果依次将其他所有变量都赋值之后,剩下的参数将会收集在一个元组中,元组的名称就是前面带*的参数名

可变参数名不能作为命名参数传递参数

 

可变参数传递

如果要传递不定量的命名参数,就可在参数名前加**,这样一来,多余的命名参数就可以以字典的方式收集到变量之中

 

拆解序列的函数调用

调用函数时还可以把元组和字典拆解调用

#拆解元组:提供位置参数

#拆解字典:提供关键字参数

调用时使用拆解元组的方法是在调用时提供的参数前加一个*:要拆解字典必须在提供的调用参数前加两个*即**

def mysum(a, b):

  return a+b

print(mysum(*(3, 4)))

print(mysum(**(‘a‘:3, ‘b‘: 4)))  #好像必须为字符,若为a:3则会报错

 

函数调用时参数的传递方法(类似值与引用)

Python中的类型如整数、浮点数、字符串、元组等都属于不可变类型,而列表和字典属于可变的

不可变类型如整型等改变其值实际上是在内存中重新创建一个整数值,然后将变量引用与其绑定

在函数调用时,若提供的是不可变参数,name在函数内部对其修改时,在函数外部其值是不变的;若提供的是可变参数,则在函数内部对其修改时,函数外部值也会改变

陷阱

def myfun(lst=[]):

  lst.append(‘abc‘)

  print(lst)

myfun()

myfun()

myfun()

三次调用后变为[‘abc‘, ‘abc‘, ‘abc‘] #不理解原理,做了个试验在Python函数中的列表重入

应改为

def myfun(lst = None):

  lst = [] if list is None else lst

  lst.append(‘abc‘)

  print(lst)

myfun()

myfun()

myfun()

 

2、匿名函数(lambda)

lambda params:expr

#params为函数参数,expr为函数要返回值的表达式。表达式中不能再包含其他语句,也可以返回元组(要用括号),还允许在表达式中调用其他函数

 

3、Python常用內建函数

help(obj)    #显示对象的帮助信息,例help(abs)

bin(aint)    #十进制数转换为二进制数的字符串形式

hex(aint)    #十进制数转换为十六进制数的字符串形式

oct(aint)    #十进制数转换为八进制数的字符串形式

callable(obj)  #测试对象是否可调用(函数)

chr(aint)    #ASCII码转字符

ord(char)    #字符转ASCII码

filter(fun,seq)   #对序列中的数据用函数过滤

例:list(filter(lambda x:x % 2 == 1,alst)),去除列表中的偶数

  #fun  过滤函数,将返回True的元素加入新列表

  #列表  待过滤列表

map(fun,seq)     #对序列中的数据逐个变换

例:list(map(lambda x:2*x, alst)),将列表中元素都扩大为原来的两倍

  #fun  处理元素的函数

  #seq  待处理的列表

isinstance(obj.typestr)  #测试对象是否为某类型

 

4、变量作用域

#内置作用域:Python预先定义的

#全局作用域:所编写的整个程序

#局部作用域:某个函数内部范围

 

使函数内部变量成为全局变量(global声明)

技术分享图片

 

以上代码上下两节调换也可运行,不过global并未作用,函数内a变为局部变量

函数内若无与全局变量相同的变量,则可引用全局变量,若有,则在整个函数内部隐藏全局变量,即不可在定义本函数同名变量前使用同名全局变量

 

函数与对象

标签:map   psd   wip   ttl   pex   列表   去除   svg   整数   

原文地址:https://www.cnblogs.com/chenxingyang/p/8820902.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!