python中函数部分内容的解析


本文摘自php中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于python中函数部分内容的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

在python中,变量没有类型,一个对象的引用,类型属于对象
变量的本质上是一个占位符!通常用小写字母命名变量。

一:语法

def 函数名(参数列表):
函数体
(函数名命名一般用小写字母 + 单下划线数字等组合)

二:常用函数的类型

(1)带参数的函数:参数须以正确的顺序传入函数

(2)默认参数函数:未传递参数,则会使用默认参数,默认参数不在最后,会报错!

(3)关键字参数:函数调用使用关键字参数来确定传入的参数值

(4)不定长参数:函数能处理比当初声明时更多的参数,

①*args中所有的变量都会被包装成一个元组存放所有未命名的变量
②**args中所有变量都会被包装成一个字典

(5)声明函数时,参数中星号 * 可以单独出现,*之后的的参数必须用关键字传入

(6)匿名函数,使用lambda函数创建匿名函数

①lambda 只是一个表达式,函数体比 def 简单很多
②lambda的主体是一个表达式,而不是一个代码块
③函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

三:python 函数的参数传递:

不可变类型:

类似 c++ 的值传递,如 int、string、tuple。
如fun(a),传递的只是a的值,没有影响a对象本身。
比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身.

可变类型:

类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象

四:变量作用域

python 中的作用域一般有四种:

L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域

查找规则是L->E->G->B

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

五:全局变量与局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。

(1)global用来修改全局变量的值

(2)nonlocal要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了

六:函数调用中的技巧(重要)

函数名.__doc__获取函数的帮助文档

函数名可以作为另一个函数的形参

多个返回值以元组的方式返回

内部函数,不修改全局变量可以访问全局变量!!

内部函数,修改同名全局变量,则python会认为它是一个局部变量!!

七:关于命名

(1)文件名:全小写,可以使用下划线

(2)函数名:小写,小驼峰原则

(3)变量名:全部小写,下划线连接

详细的命名规则参考PEP8

八:几个特殊的函数
map
reduce
filter

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

# --------------------------------------------------------------------------#

# 函数的语法及调用

# --------------------------------------------------------------------------#

 

 

def func(func_name, number):        # 函数的定义

    """打印输入的任何字符串"""

    print(func_name, number)

    return 'Done'

 

 

func('func_1', 'faith')             # 函数的调用

 

# --------------------------------------------------------------------------#

# 不定长参数函数,封装成元组

# --------------------------------------------------------------------------#

 

 

def func_1(func_name, *number):

    """

    打印输入的任何字符串

    """

    print(type(number))

    print(func_name, number)

    return 'Done'

 

 

func_1('func_1', 1, 2, 2, 3)

 

 

def func_2(func_name, number):   #

    print(type(number))

    print(func_name, number)

    return 'Done'

 

 

func_2('func_2', (1, 2, 2, 3))

 

 

def func_3(func_name, *number):

    print(func_name)

    print(number[3])            # 根据元组index中一部分变量

    print(number[4])

    return 'Done'

 

 

func_3('func_3', 1, 2, 2, 3, 'aaa', 'abc')

 

 

# get out question: the number of index isn't known in most case!

# --------------------------------------------------------------------------#

# 不定长参数函数,封装成字典

# --------------------------------------------------------------------------#

 

 

def func_4(func_name, **number):  # 可变参数必须在函数参数的最后

    # print(type(number))

    print(func_name, number)

    return 'Done'

 

 

func_4('func_4', name='faith')

 

# --------------------------------------------------------------------------#

# 命名关键字函数

# --------------------------------------------------------------------------#

 

 

def func_5(a, x, c, *, china, uk):

    print('func_5:', china, uk)

    print(a, x, c)

 

 

func_5(1, 2, 3, china='bJ', uk='rs')    # 调用时必须加上关键字

# func_5(1, 2, 3, 'bJ', 'rs')

 

# --------------------------------------------------------------------------#

# 函数应用之-递归

# --------------------------------------------------------------------------#

 

 

def my_sum(i):

    if i < 0:

        raise ValueError    # 抛出错误

    elif i <= 1:

        return i

    else:

        return i + my_sum(i - 1)

 

 

print(my_sum(1.4))

 

# --------------------------------------------------------------------------#

# 传递不可变对象实例

# --------------------------------------------------------------------------#

 

 

def change_int(a):

    a = 10

 

 

b = 2

change_int(b)

print(b)         # 结果是2

# --------------------------------------------------------------------------#

# 传递可变对象实例

# --------------------------------------------------------------------------#

 

 

def change_me(mylist):

    mylist.append([1, 2, 3, 4])

    print("函数内取值: ", mylist)

    return

 

 

myList = [10, 20, 30]

change_me(myList)

print("函数外取值: ", myList)

 

# --------------------------------------------------------------------------#

# 函数内修改全局变量的值

# --------------------------------------------------------------------------#

 

money = 200  # 模块里面的全局变量

 

 

def add_money():

    global money

    money = money + 1

    return money

 

 

print("修改后的值money = ", add_money())

 

 

# --------------------------------------------------------------------------#

# 匿名函数

# --------------------------------------------------------------------------#

sum_1 = lambda arg1, arg2: arg1 + arg2

 

# 调用sum函数

print("相加后的值为 : ", sum_1(10, 20))

print("相加后的值为 : ", sum_1(20, 20))

 

# 单独编译一个文件时候输出结果

if __name__ == "__main__":

    pass

以上就是python中函数部分内容的解析的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python异常与错误区别

Python中py2exe打包工具的用法详解

Python如何管理内存

Python中dir是什么意思

Python函数之compile()函数

怎么进入Python

Python对字符串实现重操作方法讲解

Python字符串反转

Python list的常用方法

Python怎么学得快

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...