Python基础知识-pycharm版(第6节)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、函数也是对象
  • 二、全局变量和局部变量
  • 三、参数
    • 1.传递
    • 2.浅拷贝和深拷贝
    • 3.传递不可变对象包含的子对象是可变的情况
    • 4.参数类型
  • 四、特殊函数
    • 1.lambda 表达式和匿名函数
    • 2.eval()函数
    • 3.递归函数


一、函数也是对象

Python 中,圆括号意味着调用函数。在没有圆括号的情况下,Python 会把函数当做普通对象。

二、全局变量和局部变量

  • 全局变量:
    在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块
    结束。
    全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
    全局变量一般做常量使用。
    函数内要改变全局变量的值,使用global 声明一下
  • 局部变量:
    在函数体中(包含形式参数)声明的变量。
    局部变量的引用比全局变量快,优先考虑使用。
    如果局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量
a = 100 #全局变量
def f1():
global a #如果要在函数内改变全局变量的值,增加global 关键字声明
print(a) #打印全局变量a 的值
a = 300
f1()
print(a)

执行结果:
100
300

三、参数

1.传递

Python 中参数的传递都是“引用传递”,不是“值传递”。分为两类:

  1. 对“可变对象”进行“写操作”,直接作用于原对象本身。
  2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填
    充这块空间。
    可变对象有:
    字典、列表、集合、自定义的对象等
    不可变对象有:
    数字、字符串、元组、function 等

2.浅拷贝和深拷贝

copy.copy(浅拷贝)、copy.deepcopy(深拷贝)

3.传递不可变对象包含的子对象是可变的情况

传递不可变对象时,不可变对象里面包含的子对象是可变的,则方法内修改了这个可变对象,源对象也发生了变化。

a = (10,20,[5,6])
print("a:",id(a))
def test01(m):
print("m:",id(m))
m[2][0] = 888
print(m)
print("m:",id(m))
test01(a)
print(a)

运行结果:
a: 41611632
m: 41611632
(10, 20, [888, 6])
m: 41611632
(10, 20, [888, 6])

4.参数类型

  • 位置参数:函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。
  • 默认值参数:默认值参数必须位于普通位置参数后面。
  • 命名参数:也称“关键字参数”。
  • 可变参数:*param(一个星号),将多个参数收集到一个“元组”对象中;**param(两个星号),将多个参数收集到一个“字典”对象中。
  • 强制命名参数:在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数”。

四、特殊函数

1.lambda 表达式和匿名函数

lambda 表达式的基本语法:lambda arg1,arg2,arg3... : <表达式>

代码(示例):

g = [lambda a:a*2,lambda b:b*3,lambda c:c*4]
print(g[0](6),g[1](7),g[2](8))

执行结果:12 21 32

2.eval()函数

功能:将字符串str 当成有效的表达式来求值并返回计算结果。
语法:eval(source[, globals[, locals]]) -> value
参数:
source:一个Python 表达式或函数compile()返回的代码对象
globals:可选。必须是dictionary
locals:可选。任意映射对象

3.递归函数

每个递归函数必须包含两个部分:

  1. 终止条件
    表示递归什么时候结束。一般用于返回值,不再调用自己。
  2. 递归步骤
    把第n 步的值和第n-1 步相关联。
    Python基础知识-pycharm版(第6节)_第1张图片

代码(示例):

#使用递归函数计算阶乘(factorial)
def factorial(n):
if n==1:return 1
return n*factorial(n-1)
for i in range(1,6):
print(i,'!=',factorial(i))

执行结果:
1 != 1
2 != 2
3 != 6
4 != 24
5!=120
Python基础知识-pycharm版(第6节)_第2张图片

你可能感兴趣的:(python)