一、函数的参数:

1、位置参数:调用函数时根据函数定义的参数位置来传递参数。

2、关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

3、默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

4、参数组:有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递。

基本原则是:先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)
例:
def name(a,b,c,d=1,*args,**kwargs):
    print(a,b,c,d,args,kwargs)
name(2,2,3,33,'asda',asd=1212,bbs=1213)
输出:
2 2 3 33 ('asda',) {'asd': 1212, 'bbs': 1213}

注:*args 表示任何多个无名参数,它是一个tuple;**kwargs 表示关键字参数,它是一个dict。并且同时使用*args**kwargs时,必须*args参数列要在**kwargs

二、内置函数:

Python内置(built-in)函数随着python解释器的运行而创建。在Python的程序中,你可以随时调用这些函数,不需要定义。最常见的内置函数是:

print("Hello World!")

在Python教程中,我们已经提到下面一些内置函数:

基本数据类型 type()
反过头来看看 dir() help() len()
词典 len()
文本文件的输入输出 open()
循环设计 range() enumerate() zip()
循环对象 iter()
函数对象 map() filter() reduce()

下面我采取的都是实际的参数,你可以直接在命令行尝试效果。

数学运算

abs(-5)                          # 取绝对值,也就是5
round(2.6)                       # 四舍五入取整,也就是3.0
pow(2, 3)                        # 相当于2**3,如果是pow(2, 3, 5),相当于2**3 % 5
cmp(2.3, 3.2)                    # 比较两个数的大小
divmod(9,2)                      # 返回除法结果和余数
max([1,5,2,9])                   # 求最大值
min([9,2,-4,2])                  # 求最小值
sum([2,-1,9,12])                 # 求和

类型转换

int(")                         # 转换为整数 integer
float(2)                         # 转换为浮点数 float
long(")                       # 转换为长整数 long integer
str(2.3)                         # 转换为字符串 string
complex(3, 9)                    # 返回复数 3 + 9i
ord("A")                         # "A"字符对应的数值
chr(65)                          # 数值65对应的字符
unichr(65)                       # 数值65对应的unicode字符
bool(0)                          # 转换为相应的真假值,在Python中,0相当于False
在Python中,下列对象都相当于False: [], (), {}, 0, None, 0.0, ''
bin(56)                          # 返回一个字符串,表示56的二进制数
hex(56)                          # 返回一个字符串,表示56的十六进制数
oct(56)                          # 返回一个字符串,表示56的八进制数
list((1,2,3))                    # 转换为表 list
tuple([2,3,4])                   # 转换为定值表 tuple
slice(5,2,-1)                    # 构建下标对象 slice
dict(a=1,b="hello",c=[1,2,3])    # 构建词典 dictionary

序列操作

all([True, 1, "hello!"])         # 是否所有的元素都相当于True值
any(["", 0, False, [], None])    # 是否有任意一个元素相当于True值
sorted([1,5,3])                  # 返回正序的序列,也就是[1,3,5]
reversed([1,5,3])                # 返回反序的序列,也就是[3,5,1]

类,对象,属性

# define classclass Me(object):
    def test(self):
        print "Hello!"
def new_test():    print "New Hello!"
me = Me()
hasattr(me, "test")               # 检查me对象是否有test属性
getattr(me, "test")               # 返回test属性
setattr(me, "test", new_test)     # 将test属性设置为new_test
delattr(me, "test")               # 删除test属性
isinstance(me, Me)                # me对象是否为Me类生成的对象 (一个instance)
issubclass(Me, object)            # Me类是否为object类的子类

编译,执行

repr(me)                          # 返回对象的字符串表达
compile("print('Hello')",'test.py','exec')       # 编译字符串成为code对象
eval("1 + 1")                     # 解释字符串表达式。参数也可以是compile()返回的code对象
exec("print('Hello')")            # 解释并执行字符串,print('Hello')。参数也可以是compile()返回的code对象

其他

input("Please input:")            # 等待输入
globals()                         # 返回全局命名空间,比如全局变量名,全局函数名
locals()                          # 返回局部命名空间

三、装饰器:

装饰器的定义:本质是函数,为其他函数添加附加功能。
原则:1、不能修改被装饰函数的源代码。
     2、不能修改被装饰函数的调用方式。高阶函数+嵌套函数组成装饰器高阶函数:1、函数返回值返回一个函数名。        2、把函数变量名作为变量传到函数里。嵌套函数:函数体里有用def定义的函数。

例:

1、为函数增加计算运行时间的功能:
import time
def count_time(func):
    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print('Time is:',end_time - start_time)
    return inner

@count_time         #method1=count_time(method1)=inner
def method1():
    time.sleep(0.7)
    print('Is in method1')
@count_time
def method2():
    time.sleep(0.8)
    print('Is in method2')

method1()
method2()
输出:
Is in method1
Time is: 0.7000398635864258
Is in method2
Time is: 0.8000457286834717
2、如果被修饰函数增加参数并且有返回值:
import time
def count_time(func):
    def inner(*args,**kwargs):
        start_time = time.time()
        asc = func(*args,**kwargs)
        end_time = time.time()
        print('Time is:',end_time - start_time)
        return asc
    return inner

@count_time
def method1(name,age):
    time.sleep(0.7)
    print('Is in method1',name,age)
    return 'Sleep 0.7s'
@count_time
def method2():
    time.sleep(0.8)
    print('Is in method2')

print(method1('cheng',24))
method2()
输出:
Is in method1 cheng 24
Time is: 0.700040340423584
Sleep 0.7s
Is in method2
Time is: 0.8000457286834717

3、装饰器带参数:
import time
def count_time(func):
    print(func)
    def inner1(method):
        def inner2(*args, **kwargs):
            start_time = time.time()
            asc = method(*args, **kwargs)
            end_time = time.time()
            print('Time is:', end_time - start_time)
            return asc
        return inner2
    return inner1

@count_time(func='pass')  #method1 = count_time(func='pass')(method1)=inner1(method1)=inner2
def method1(name,age):
    time.sleep(0.7)
    print('Is in method1',name,age)
    return 'Sleep 0.7s'
@count_time(func='cla')
def method2():
    time.sleep(0.8)
    print('Is in method2')

print(method1('cheng',24))
method2()
输出:
pass
cla
Is in method1 cheng 24
Time is: 0.700040340423584
Sleep 0.7s
Is in method2
Time is: 0.8000457286834717

四、迭代器&生成器

生成器generator:

  通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

  所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

迭代器:

  我们已经知道,可以直接作用于for循环的数据类型有以下几种:

  一类是集合数据类型,如listtupledictsetstr等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是Iterable对象:

  而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

  迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存

Python 4 函数的参数,内置函数,装饰器,生成器,迭代器,的更多相关文章

  1. python全栈开发-Day13 内置函数

    一.内置函数 注意:内置函数id()可以返回一个对象的身份,返回值为整数. 这个整数通常对应与该对象在内存中的位置,但这与python的具体实现有关,不应该作为对身份的定义,即不够精准,最精准的还是以 ...

  2. Python学习(八) —— 内置函数和匿名函数

    一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...

  3. python基础12_匿名_内置函数

    一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...

  4. 【python】dir(__builtins__)查看python中所用BIF(内置函数)

    dir(__builtins__)查看python中所用BIF(内置函数)

  5. 查看python内部模块命令,内置函数,查看python已经安装的模块命令

    查看python内部模块命令,内置函数,查看python已经安装的模块命令 可以用dir(modules) 或者用 pip list或者用 help('modules') 或者用 python -m  ...

  6. 生成器的send方法、递推函数、匿名函数及常用内置函数

    生成器的send方法 在使用yield方法创建生成器时,不仅可以使用next方法进行取值,还可以通过send方法向生成器的内部传值 什么是send方法? send方法相当于高级的next方法,send ...

  7. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  8. python补充最常见的内置函数

    最常见的内置函数是: print("Hello World!") 数学运算 abs(-5)                         # 取绝对值,也就是5 round(2. ...

  9. Python基础(七)内置函数

    今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. 1 2 3 ...

  10. Python 几个重要的内置函数

    所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以用.内置函数,这意味着我们不必为了使用该函数而导入模块.不必做任何操作,Python 就可识别内置函数.在学习Python的过程中,有 ...

随机推荐

  1. TFS中如何排除Nuget的Packages文件夹

    在项目的解决方案下新增.tfignore文件.文件内容如下: \packages 在项目的解决方案下新增.nuget文件夹,并新增Nuget.config文件,文件内容如下: <?xml ver ...

  2. c++ how to make your own class a valid key type for std::map?

    In Java, if you want your own class to be a valid key type of the container, you just need to make i ...

  3. Unity学习笔记 - Assets, Objects and Serialization

    Assets和Objects Asset是存储在硬盘上的文件,保存在Unity项目的Assets文件夹内.比如:纹理贴图.材质和FBX都是Assets.一些Assets以Unity原生格式保存数据,例 ...

  4. 学习笔记 - Unity是如何将你的项目发布到如此多的平台的?

    很多Unity的开发者是不是都会觉得Unity能把项目导出发布到那么多不同的平台上运行是件很牛X的事情?那么你有没有想过Unity是如何做到的呢?本文就来大体的聊一聊Unity做的这件神奇的事情. 概 ...

  5. hmtl表单

    表单: <form id="" name="" method="post/get" action="负责处理的服务端&quo ...

  6. LeetCode543. Diameter of Binary Tree

    Description Given a binary tree, you need to compute the length of the diameter of the tree. The dia ...

  7. AtCoder Regular Contest 070 D - No Need 想法:利用单调性二分+bitset优化

    /** 题目:D - No Need 链接:http://arc070.contest.atcoder.jp/tasks/arc070_b 题意:给出N个数,从中选出一个子集,若子集和大于等于K,则这 ...

  8. Sphinx 安装与使用(1)-- 安装Coreseek

    Coreseek就是Sphinx的中文版 官方网站 http://www.coreseek.cn/ 一.安装 1.修改LANG 永久修改: vim /etc/locale.conf LANG=&quo ...

  9. English 好的报纸

    1. 高级阶段 China daily: ( 带有官方色彩 ) www.chinadaily.com.cn 2. econnomist ( 经济人报 ) www.econnomist.com

  10. nginx 用法

    nginx配置location总结及rewrite规则写法 如何将 /health 重定向到 /health.html https://stackoverflow.com/questions/4614 ...