您的位置:首页 > 编程语言 > Python开发

python基础内容重新理解之函数

2017-03-10 20:59 375 查看


最近写了个简单的python爬取新浪NBA球员数据的小脚本。虽然编写函数,创建类和对象什么的都没什么问题,但是却不能正确了解其中的正确关系。self代表什么?为什么有的函数名字之前会加上__双下划线?是时候重新了解一下什么是真正的面向对象的技术了!
为什么存在?

所谓存在即有理,函数是程序员们为了偷懒而设计,目的是讲具有相同的操作或者能够达到相同的目的的操作同一起来,抽象之为函数。

函数的创建!

        普通创建:def methodA():   函数名一般规范为第一个单词小写,其余单词首字母大写,如getName()

            装饰器创建。

函数的参数:

           形参:只是传递作用,存在必选参数,默认参数,魔法参数,组合参数

           实参:传递进去的实际有值得参数

          
魔法参数:注意输出时没有*号,一个*是尽可能的收集其余参数返回元组,**是尽可能的收集其余参数返回一个字典。例如requests模块的requests(url,**kwargs)


def getName(name,*n,**m):
a = name
print(a,n,m)
getName('zhao',1,2,3,key1='value1',key2='value2')
#zhao (1, 2, 3) {'key1': 'value1', 'key2': 'value2'}

函数的返回值:所有函数都有返回值,可能是你reduce的或者None

函数中变量的作用域:

        
一个变量在函数中,只在该函数起作用,称为全局变量。在全类中起作用,被称作全局变量。

           相互调用: 声明一个全局变量global x  则x为全局变量。调用局部变量 nonlocal不常用。

递归:函数调用自身。常见在幂运算和迭代中,以后详细介绍。实例:二分法(bisect模块实现)

函数式编程:几个函数

map(函数,列表),作用是将列表中每个元素的值传入函数中,并返回一个列表

a = map(str,range(10))
print(list(a))
#['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']filter(函数,列表),将列表中没给元素依次传入函数中。这个函数必须是基于布尔类型返回值的,通过这个函数进行对元素的过滤。isalnum()判断字符串是否全有字母数字组成
b = ['dsasd','123','ass2','##@']
def func(x):
return x.isalnum()
f = filter(func,b)
print(list(f))
#['dsasd', '123', 'ass2']

reduce(函数,列表)   作用是将列表中前两个元素传入到函数中,并将返回值继续与第三个参数传入函数中。
from functools import reduce
def add(x,y):
return x+y
c = reduce(add,range(10))
print(c)
#45

由这几个函数的扩展:
        列表推导式: x for x in b if x.isalnum()   与filter(func,b)相同

                              str(i) for i in range(10)       与  map(str,range(10))相同

            求和:In [12]: sum(range(10))

                      Out[12]: 45

以上全部为简单零碎只是,算是《python基础教程》的读书笔记,毕竟理解了才算是自己的

在后来更加抽象时再增添函数的特性。如函数名.__doc__返回的是函数的注释
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 面向对象