wb.ouyang

毕竟几人真得鹿,不知终日梦为鱼

导航

python基础--函数

1、几个特性

1.1、关于脚本第一行的解释

#!/usr/bin/python3
print("Hello, World!")

关于脚本第一行的 #!/usr/bin/python 的解释,相信很多不熟悉 Linux 系统的同学需要普及这个知识,脚本语言的第一行,只对 Linux/Unix 用户适用,用来指定本脚本用什么解释器来执行。

有这句的,加上执行权限后,可以直接用 ./ 执行,不然会出错,因为找不到 python 解释器。

#!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器。

#!/usr/bin/env python 这种用法是为了防止操作系统用户没有将 python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/python 相当于写死了 python 路径。

#!/usr/bin/env python 会去环境设置寻找 python 目录,可以增强代码的可移植性,推荐这种写法。

分成两种情况:

(1)如果调用 python 脚本时,使用 python script.py#!/usr/bin/python 被忽略,等同于注释

(2)如果调用python脚本时,使用 ./script.py#!/usr/bin/python 指定解释器的路径

PS:shell 脚本中在第一行也有类似的声明。

 

1.2、一个语句同时赋值

#!/usr/bin/python3
 
# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 10:
    print(b)
    a, b = b, a+b

这个例子介绍了几个新特征。第一行包含了一个复合赋值:变量 a 和 b 同时得到新值 0 和 1。最后一行再次使用了同样的方法,可以看到,右边的表达式会在赋值变动之前执行。右边表达式的执行顺序是从左往右的。

  所以,交换两个变量的值,python中可以这样实现:

a = 1
b = 2
print("a=%d, b=%d"%(a, b))
a, b = b, a
print("a=%d, b=%d"%(a, b))

 

1.3、print()方法

  end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 1000:
    print(b, end=',')
    a, b = b, a+b

  结果输出为:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

 

2、函数

2.1、定义函数

# 全局变量和局部变量名字相同
str = "aaa" # 定义了一个全局变量
def myPrint():
    #global str #:使用global对一个全局变量的声明
    str = "bbb"
    print(str)
    
myPrint()  # 结果:bbb
print(str) # 结果:aaa

 

2.2、缺省参数:

def myPrint(name, age = 10):
    print(name)
    print(age)
    
myPrint("zs", 20)
myPrint("zs")
print("=" * 10)
myPrint(name = "zs", age = 30)
myPrint(name = "zs")

 

2.3、不定长参数

def myPrint(a, *params):
    print(a)
    print(params) # params是元组类型 (10, 20, 30)
    
myPrint("zs", 10, 20, 30)
def myPrint(a, **params):
    print(a)
    print(params) # params是字典类型 {'name': 'zs', 'age': 20} 
    print(type(params))
    for key in params:
        print(key, params[key], end = ", ")
    
myPrint("zs", name='zs', age = 20)

 

2.4、拆包

def myPrint(a, *args, **params):
    print(a)
    print(args)
    print(params)
    
args = (1, 2, 3);
params = {'name':'zs', 'age':20};
myPrint("zs", *args, **params)

打印结果:
zs
(1, 2, 3)
{'name': 'zs', 'age': 20}

 

2.5、匿名函数

def test(a, b, fn):
    return fn(a, b)
    
print(test(10, 20, lambda x,y:x+y))
print(test(10, 20, lambda x,y:x-y))
print(test(10, 20, lambda x,y:x*y))
def test(a, b, fn):
    return fn(a, b)

fn_new = input("请输入 lambda表达式:")
    
print(test(10, 20, eval(fn_new)))

posted on 2019-10-09 23:42  wenbin_ouyang  阅读(175)  评论(0)    收藏  举报