In [1]:
# 最简单的函数定义
def my_max():
    print("其实我啥都不做")
In [2]:
# 调用上面自定义的函数
my_max()
其实我啥都不做
In [3]:
# 带返回值的函数
def my_nothing():
    return 23333
In [4]:
# 调用,并且将返回值赋值给变量
n = my_nothing()
In [5]:
n
Out[5]:
23333
In [6]:
# 带参数的函数
def real_max(a, b):
    if a > b:
        return a
    else:
        return b
In [7]:
# 按顺序进行形参实参结合
real_max(7, 8)
Out[7]:
8
In [8]:
# 按名字进行结合,顺序可随意
real_max(b=999, a=321)
Out[8]:
999
In [9]:
# 混合式
real_max(10, b=3)
Out[9]:
10
In [10]:
# 错误的混合式,重复指定了a,而且b还漏了
# 注意:人工检查能发现多个错误,但是编译器在第一个就会停下报错
real_max(10, a=3)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-97a905ac44ba> in <module>
      1 # 错误的混合式,重复指定了a,而且b还漏了
      2 # 注意:人工检查能发现多个错误,但是编译器在第一个就会停下报错
----> 3 real_max(10, a=3)

TypeError: real_max() got multiple values for argument 'a'
In [11]:
# 漏了参数b
real_max(10)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-41b9b7febdc9> in <module>
      1 # 漏了参数b
----> 2 real_max(10)

TypeError: real_max() missing 1 required positional argument: 'b'
In [12]:
# 带默认值的参数,在调用的时候,a b必须,而c可选
def max3(a, b, c=0):
    if a > b and a > c:
        print(a)
    elif b > a and b > c:
        print(b)
    elif c > a and c > b:
        print(c)
In [13]:
max3(1, 5, 3,)
max3(-9, -6)
5
0
In [14]:
max3(1, c=5, b=3)
max3(-9, b=-6)
5
0
In [15]:
# 使用可变个数参数的函数(知道就行,不要求熟悉这个)
def max00(
    *args,
    **kwargs
):
    """
    doc-string
    这是一个奇葩的求最大值函数
    """
    print(args)
    print(kwargs)
In [16]:
max00("o", 3, d=4)
('o', 3)
{'d': 4}
In [17]:
# 在函数或者别的对象的前或者后加问号,可以查看该对象的说明
?max00
In [18]:
# 把函数写到 test.py 文件中,引入这个文件模块
import test
In [19]:
# 前者是来自模块test中的函数max00,后者是在本文件中定义的max00,不一样
test.max00, max00
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-19-2b6ddcea15b2> in <module>
      1 # 前者是来自模块test中的函数max00,后者是在本文件中定义的max00,不一样
----> 2 test.max00, max00

AttributeError: module 'test' has no attribute 'max00'
In [20]:
# 把文件模块放在目录中
import t1207.test
In [21]:
t1207.test.max00
Out[21]:
<function t1207.test.max00(*args, **kwargs)>
In [23]:
# import的时候可以给模块起别名,一方面是简略,一方面是避免重名
import test as te
In [27]:
%%time
# 加上%%time这个魔法指令,用于计算本单元格执行时间
from matplotlib import pyplot as plt
from astropy.io import fits, ascii
CPU times: user 619 ms, sys: 140 ms, total: 759 ms
Wall time: 1.01 s
In [28]:
plt.plot(np.sin(np.arange(0, 10, 0.01)));
In [29]:
import sys
sys.path.insert(0, "../t1207")
In [30]:
import test
In [ ]: