开始Python -- 抽象化(1)
2007-10-17 17:54
423 查看
1、创建自己的函数
l Callable()函数:检查是否可以调用
>>> from math import sqrt as x
>>> y = 1
>>> callable(x)
True
>>> callable(y)
False
l 创建函数:用def关键字定义,用return语句返回结果
def fibs(num):
result = [0, 1]
for i in range(num-2):
result.append(result[-2] + result[-1])
return result
(1) 函数Doc
l 函数开始处的一个String(称为docstring)
>>> def square(x):
... 'Calculates the square of the number x.'
... return x*x
l 使用help()函数显示函数Doc
>>> help(square)
Help on function square in module __main__:
square(x)
Calculates the square of the number x.
(2) keyword参数和缺省值
l 函数的参数在调用时是有顺序的,但使用keyword参数不用关心顺序问题:
>>> def hello_1(greeting, name): print '%s, %s!' % (greeting, name)
>>> hello_1(name='world', greeting='Hello')
Hello, world!
l 在创建函数时可以为参数指定缺省值:
def hello_3(greeting='Hello', name='world'): print '%s, %s!' % (greeting, name)
l 下面各种调用的情况:
>>> hello_3()
Hello, world!
>>> hello_3('Greetings')
Greetings, world!
>>> hello_3('Greetings', 'universe')
Greetings, universe!
l 如果只使用greeting的缺省值,可以使用keyword参数:
>>> hello_3(name='Gumby')
Hello, Gumby!
l 可以混合使用必选参数和带缺省值的参数,但前者必须放在最前面:
>>> def hello_4(name, greeting='Hello', punctuation='!'):
... print '%s, %s%s' % (greeting, name, punctuation)
(3) 集合参数
l 在参数前面加“*”,表示调用时其后的值放到Tuple中
>>> def print_params_2(title, *params):
... print title,
... print params
>>> print_params_2('Params:', 1, 2, 3)
Params: (1, 2, 3)
l Tuple集合参数不能使用keyword参数:
>>> print_params_2('Hmm...', something=42)
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
TypeError: print_params_2() got an unexpected keyword argument 'something'
l 可以使用Dictionary集合参数(在参数前面加“**”)
>>> def print_params_3(title, **params):
... print title,
... print params
>>> print_params_3('Hmm...', something=42)
Hmm... {'something': 42}
l “*”、“**”的逆向使用:
>>> params = ('Sir Robin', 'Well met')
>>> hello_3(*params)
Sir Robin, Well met!
>>> params = {'name': 'Sir Robin', 'greeting': 'Well met'}
>>> hello_3(**params)
Well met, Sir Robin!
2、范围(或者namespace)
l 除了全局范围之外,每个函数的调用都会创建一个范围,vars()函数返回当前范围中所有的变量及其值的Dictionary:
>>> def foo():
... x = 42
... print vars()
...
>>> x = 1
>>> foo()
{'x': 42}
>>> vars()
{'__builtins__': <module '__builtin__' (built-in)>, 'pywin': <module 'pywin' from 'D:/workshop/Python24/Lib/site-packages/pythonwin/pywin/__init__.pyc'>, 'x': 1, '__name__': '__main__', 'foo': <function foo at 0x00FF5BB0>, '__doc__': None}
l 当函数中的变量和全局变量同名时,可以使用globals()函数(返回Dictionary)来访问全局变量:
>>> def combine(parameter):
print parameter + globals()['parameter']
...
>>> parameter = 'berry'
>>> combine('Shrub')
Shrubberry
3、有用的函数
(1) map
l LAMBDA表达式:以关键字lambda开始,后面跟参数,然后是“:”,最后是表达式
lambda x, y, z: x + y + z
l map():通过指定函数应用到每个元素,将一个Sequence映射成另一个Sequence
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> map(lambda n: 2*n, numbers)
[144, 202, 216, 216, 222, 88, 64, 238, 222, 228, 216, 200, 66]
l 由于String是字符Sequence,可以直接使用,但要注意返回的是List
>>> map(ord, 'Hello, world!')
[72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
(2) filter
l filter():通过指定函数应用到每个元素,将一个Sequence符合的元素组成另一个Sequence
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> filter(lambda n: n % 2 == 0, numbers)
[72, 108, 108, 44, 32, 114, 108, 100]
l 使用List包含可以实现map()和flter()的相同功能:
>>> [chr(n) for n in numbers] # characters corresponding to numbers
['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> [n for n in numbers if n % 2 == 0] # filters out the odd numbers
[72, 108, 108, 44, 32, 114, 108, 100]
(3) reduce
l reduce():使用Sequence中开始的两个元素调用指定的函数,然后用结果和第3个元素调用指定的函数,依次类推到最后的元素,最后返回结果值
l 典型的例子是求和:
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> reduce(lambda x, y: x+y, numbers)
1161
l Callable()函数:检查是否可以调用
>>> from math import sqrt as x
>>> y = 1
>>> callable(x)
True
>>> callable(y)
False
l 创建函数:用def关键字定义,用return语句返回结果
def fibs(num):
result = [0, 1]
for i in range(num-2):
result.append(result[-2] + result[-1])
return result
(1) 函数Doc
l 函数开始处的一个String(称为docstring)
>>> def square(x):
... 'Calculates the square of the number x.'
... return x*x
l 使用help()函数显示函数Doc
>>> help(square)
Help on function square in module __main__:
square(x)
Calculates the square of the number x.
(2) keyword参数和缺省值
l 函数的参数在调用时是有顺序的,但使用keyword参数不用关心顺序问题:
>>> def hello_1(greeting, name): print '%s, %s!' % (greeting, name)
>>> hello_1(name='world', greeting='Hello')
Hello, world!
l 在创建函数时可以为参数指定缺省值:
def hello_3(greeting='Hello', name='world'): print '%s, %s!' % (greeting, name)
l 下面各种调用的情况:
>>> hello_3()
Hello, world!
>>> hello_3('Greetings')
Greetings, world!
>>> hello_3('Greetings', 'universe')
Greetings, universe!
l 如果只使用greeting的缺省值,可以使用keyword参数:
>>> hello_3(name='Gumby')
Hello, Gumby!
l 可以混合使用必选参数和带缺省值的参数,但前者必须放在最前面:
>>> def hello_4(name, greeting='Hello', punctuation='!'):
... print '%s, %s%s' % (greeting, name, punctuation)
(3) 集合参数
l 在参数前面加“*”,表示调用时其后的值放到Tuple中
>>> def print_params_2(title, *params):
... print title,
... print params
>>> print_params_2('Params:', 1, 2, 3)
Params: (1, 2, 3)
l Tuple集合参数不能使用keyword参数:
>>> print_params_2('Hmm...', something=42)
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
TypeError: print_params_2() got an unexpected keyword argument 'something'
l 可以使用Dictionary集合参数(在参数前面加“**”)
>>> def print_params_3(title, **params):
... print title,
... print params
>>> print_params_3('Hmm...', something=42)
Hmm... {'something': 42}
l “*”、“**”的逆向使用:
>>> params = ('Sir Robin', 'Well met')
>>> hello_3(*params)
Sir Robin, Well met!
>>> params = {'name': 'Sir Robin', 'greeting': 'Well met'}
>>> hello_3(**params)
Well met, Sir Robin!
2、范围(或者namespace)
l 除了全局范围之外,每个函数的调用都会创建一个范围,vars()函数返回当前范围中所有的变量及其值的Dictionary:
>>> def foo():
... x = 42
... print vars()
...
>>> x = 1
>>> foo()
{'x': 42}
>>> vars()
{'__builtins__': <module '__builtin__' (built-in)>, 'pywin': <module 'pywin' from 'D:/workshop/Python24/Lib/site-packages/pythonwin/pywin/__init__.pyc'>, 'x': 1, '__name__': '__main__', 'foo': <function foo at 0x00FF5BB0>, '__doc__': None}
l 当函数中的变量和全局变量同名时,可以使用globals()函数(返回Dictionary)来访问全局变量:
>>> def combine(parameter):
print parameter + globals()['parameter']
...
>>> parameter = 'berry'
>>> combine('Shrub')
Shrubberry
3、有用的函数
(1) map
l LAMBDA表达式:以关键字lambda开始,后面跟参数,然后是“:”,最后是表达式
lambda x, y, z: x + y + z
l map():通过指定函数应用到每个元素,将一个Sequence映射成另一个Sequence
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> map(lambda n: 2*n, numbers)
[144, 202, 216, 216, 222, 88, 64, 238, 222, 228, 216, 200, 66]
l 由于String是字符Sequence,可以直接使用,但要注意返回的是List
>>> map(ord, 'Hello, world!')
[72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
(2) filter
l filter():通过指定函数应用到每个元素,将一个Sequence符合的元素组成另一个Sequence
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> filter(lambda n: n % 2 == 0, numbers)
[72, 108, 108, 44, 32, 114, 108, 100]
l 使用List包含可以实现map()和flter()的相同功能:
>>> [chr(n) for n in numbers] # characters corresponding to numbers
['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> [n for n in numbers if n % 2 == 0] # filters out the odd numbers
[72, 108, 108, 44, 32, 114, 108, 100]
(3) reduce
l reduce():使用Sequence中开始的两个元素调用指定的函数,然后用结果和第3个元素调用指定的函数,依次类推到最后的元素,最后返回结果值
l 典型的例子是求和:
>>> numbers = [72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33]
>>> reduce(lambda x, y: x+y, numbers)
1161
相关文章推荐
- 开始Python -- 抽象化(2)
- Python语言的创始人解释为什么Python数组的索引从0开始
- Python,学习的开始
- 开始学习Python
- Python的学习之旅开始
- 开始学习Python
- 开始使用Python
- 从今天开始,每天花1小时学习Python,附电子书
- 开始python 之旅
- 从0开始自学Python:9、列表生成式
- 学习一门计算机语言,python开始
- 小学生开始学Python,还有什么能够阻挡我对Python的向往?
- 用Python开始机器学习(4:KNN分类算法) sklearn做KNN算法 python
- 新的学习:从Python开始
- Python3:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- 从0开始学Python的过程以及对一些代码的见解
- 理解神经网络,从简单的例子开始(2)使用python建立多层神经网络
- 开始写blog记录下学习python的过程
- 用Python开始机器学习(3:数据拟合与广义线性回归)
- 如何用Python从0开始创建一个区块链?