发现了一个宝藏网站:Learn X in Y Minutes,由这个学习了Python,推荐给大家,下面是我跟着敲得代码及翻译还有自己加的一些注释。原网址:https://learnxinyminutes.com/docs/python3/
我用的是jupyter notebook写的,将这个直接保存成了.py文件复制的,输出结果好像没有复制上来。第一次简书比较生疏,望见谅,有问题可留言。
注:#:后面是注释
ln[x]:代表cell,即一个jupyter notebook的一个cell。
####################################################
## 4. Functions
####################################################
# In[22]:
# 通过def保留字来定义函数
def add(x, y):
print("x is {} and y is {}".format(x, y))
# return语句用来返回处理结果
return x + y
# In[23]:
# 定义之后可以带参调用
c = add(5, 6)
print(c)
# In[24]:
# 如果不按照顺序输入参数,需要添加形式参数名称
c = add(y=6, x=5)
print(c)
# In[26]:
# 也可以传入参数列表(positional arguments)
def varargs(*args):
print(type(args))
return args
# In[27]:
c = varargs(1, 2, 3)
print(c)
# In[28]:
# 可以通过keyword arguments来传入多个变量
def keyword_args(**kwargs):
print(type(kwargs))
return kwargs
# In[29]:
c = keyword_args(one='1', two='2')
print(c)
# In[30]:
# 也可以混合使用
def all_the_args(*args, **kwargs):
print(args)
print(kwargs)
"""
all_the_args(1, 2, a=3, b=4) prints:
(1, 2)
{"a": 3, "b": 4}
"""
# In[31]:
# 调用函数的时候,*和**也可以反过来使用
args_call = (1, 2, 3, 4)
kwargs_call = {"a":3, "b":4}
all_the_args(*args_call)# equivalent to all_the_args(1, 2, 3, 4)
all_the_args(**kwargs_call)# equivalent to all_the_args(a=3, b=4)
all_the_args(*args_call, **kwargs_call)# equivalent to all_the_args(1, 2, 3, 4, a=3, b=4)
# In[32]:
# 一个函数可以同时返回多个值
# 多个值是以不带括号的tuple的形式返回的
# 但是加了括号也没关系
def swap(x, y):
return y, x
# In[33]:
x =1
y =2
x, y = swap(x, y)# => x = 2, y = 1
(x, y) = swap(x, y)# 这一句和上一句一样
# In[45]:
# 函数范围
# 这里x是一个全局变量(global)
x =5
# In[46]:
def get_x(num):
# 函数内部可以访问外部全局变量
print(num)
print(x)# => 5
# In[47]:
get_x(5)
# In[48]:
get_x(6)
# In[38]:
def set_x(num):
# 但是不能在函数内部改变全局变量
# 这里的x是一个新生成的,只在函数内生效的局部变量
x = num# => 43
print(x)# => 43
# In[49]:
set_x(43)
print(x)
# In[40]:
def set_global_x(num):
# 如果想要在函数内部改变全局变量,需要通过global声明
global x
print(x)# => 5
x = num# global var x is now set to num
print(x)# => num
# In[42]:
set_global_x(43)
# In[50]:
#python支持头等函数
# 简单来讲,return的函数就是上层函数的头等函数
def create_adder(x):
# suber就是简单的嵌套定义了一个函数
def suber(z):
return x - z
n = suber(5)
# adder参与返回值,是头等函数
def adder(y):
return n + y
return adder
# In[51]:
add_10_minus_5 = create_adder(10)
# In[52]:
add_10_minus_5(3)
# In[53]:
# python也支持匿名函数
# (lambda <形式参数(列表)>: )(<实参>)
(lambda x: x >2)(3)# => True
# In[54]:
(lambda x, y: x **2 + y **2)(2, 1)# => 5
# In[55]:
# 匿名函数,实际上也是可以命名的
check_greater_than_2 =lambda x: x >2
# In[56]:
check_greater_than_2(4)
# In[57]:
# 还有内建的高阶函数
# 通过map将[1, 2, 3]分别装入add_10_minus_5进行运算
#map((函数),<函数的参数>)
# 返回结果包装成list
list(map(add_10_minus_5, [1, 2, 3]))
# In[58]:
# max是python的内建方法,求参数中的最大值
max(1,2,3)
# In[59]:
# 下面的写法就是就是对位结合,进行计算
# 相当于list(max(1,4), max(2,2), max(3,1))
list(map(max, [1, 2, 3], [4, 2, 1]))
# In[61]:
# filter 可以把返回值为true的参数,返回出来
#filter((function),) # => function parameter中满足function为true的parameter
list(filter(lambda x: x >5, [3, 4, 5, 6, 7]))# => [6, 7]
# In[62]:
# 也可以根据对列表的理解,写出漂亮的map和filter
[add_10_minus_5(i)for iin [1, 2, 3]]
# In[63]:
[xfor xin [3, 4, 5, 6, 7]if x >5]# => [6, 7]
# In[64]:
# 也可以写出漂亮的字典或者集合
{xfor xin 'abcddeef' if xnot in 'abc'}# => {'d', 'e', 'f'}
# In[65]:
{x: x**2 for xin range(5)}# => {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}