函数名的使用和新版格式化输出

Posted shangping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数名的使用和新版格式化输出相关的知识,希望对你有一定的参考价值。

1. 函数名的运用

    你们说一下,按照你们的理解,函数名是什么?

    函数名的定义和变量的定义几乎一致,在变量的角度,函数名其实就是一个变量,具有变量的功能:可以赋值;但是作为函数名他也有特殊的功能就是加上()就会执行对应的函数,所以我们可以把函数名当做一个特殊的变量,那么接下来,我们就来研究一下这个特殊的变量。

1.1 函数的内存地址

def func():       ? 
    print("呵呵")
?print(func)结果: <function func at 0x1101e4ea0>

    通过上面代码可以我们知道,函数名指向的是这个函数的内存地址,其实深一步理解可得知,与其说函数名()可以执行这个函数,不如说是函数的内存地址()才是执行这个函数的关键,就好比:

a = 1
b = 2
c = a + b
print(c)  # 3

a + b 并不是变量的相加,而是 两个变量指向的int对象的相加。

1.2 函数名可以赋值给其他变量

如果你理解了第一条,那么第二条就更容易的理解了:

def func():        
    ?print("呵呵")    ?
print(func) ?
a = func  # 把函数当成一个变量赋值给另一个变量?
a() # 函数调用 func()

通过变量的赋值,变量a,和变量func都指向的这个函数的内存地址,那么a() 当然可以执行这个函数了。

1.3 函数名可以当做容器类的元素

其实这个也不难理解,函数名就是一个变量,我的变量是可以当做容器类类型的元素的:

a = 1
b = ‘alex‘
c = ‘武sir‘
l1 = [a, b, c]
for i in l1:
    print(i)
‘‘‘
# 结果:
1
alex
武sir
‘‘‘

那么函数名也是可以的:

技术图片
def func1():
    print("in func1: 嘻嘻")
def func2():
    print("in func2: 哈哈")
def func3():
    print("in func3: 咯咯")
def func4():
    print("in func4: 吱吱")
lst = [func1, func2, func3, func4]
for i in lst:
    i()
View Code

1.4 函数名可以当做函数的参数

变量可以做的,函数名都可以做到。

技术图片
def func1():
    print(in func1)

def func2(f):
    print(in func2)
    f()

func2(func1)
View Code

1.5 函数名可以作为函数的返回值

技术图片
def func1():
    print(in func1)

def func2(f):
    print(in func2)
    return f

ret = func2(func1)
ret()  # ret, f, func1 都是指向的func1这个函数的内存地址
View Code

小结:函数名是一个特殊的变量,他除了具有变量的功能,还有最主要一个特点就是加上() 就执行,其实他还有一个学名叫第一类对象

2 Python新特性:f-strings格式化输出

    f-strings 是python3.6开始加入标准库的格式化输出新的写法,这个格式化输出比之前的%s 或者 format 效率高并且更加简化,非常的好用,相信我,你们学完这个之后,以后再用格式化输出这就是你们唯一的选择。

2.1 简单举例

    他的结构就是F(f)+ str的形式,在字符串中想替换的位置用展位,与format类似,但是用在字符串后面写入替换的内容,而他可以直接识别。

技术图片
name = 太白金星
age = 18
sex = 
msg = F姓名:name,性别:age,年龄:sex  # 大写字母也可以
msg = f姓名:name,性别:age,年龄:sex  
print(msg)
‘‘‘
输出结果:
姓名:太白金星,性别:18,年龄:男
‘‘‘
View Code

2.2 任意表达式

他可以加任意的表达式,非常方便:

技术图片
print(f3*21)  # 63

name = barry
print(f"全部大写:name.upper()")  # 全部大写:BARRY

# 字典也可以
teacher = name: 太白金星, age: 18
msg = f"The teacher is teacher[‘name‘], aged teacher[‘age‘]"
print(msg)  # The comedian is 太白金星, aged 18

# 列表也行
l1 = [太白金星, 18]
msg = f姓名:l1[0],年龄:l1[1].
print(msg)  # 姓名:太白金星,年龄:18.
View Code

2.3 也可以插入表达式

可以用函数完成相应的功能,然后将返回值返回到字符串相应的位置

技术图片
def sum_a_b(a,b):
    return a + b
a = 1
b = 2
print(求和的结果为 + fsum_a_b(a,b))
View Code

2.4 多行f

技术图片
name = barry
age = 18
ajd = handsome

# speaker = f‘‘‘Hi name.
# You are age years old.
# You are a ajd guy!‘‘‘

speaker = fHi name.          fYou are age years old.          fYou are a ajd guy!
print(speaker)
View Code

2.5 其他细节

这里有一些注意的细节,了解一下就行。

技术图片
print(f"73")  # 73
print(f"73")  # 73
print(f"73")  # 73
m = 21
# ! , :   ;这些标点不能出现在 这里面。
# print(f‘;12‘)  # 报错
# 所以使用lambda 表达式会出现一些问题。
# 解决方式:可将lambda嵌套在圆括号里面解决此问题。
x = 5
print(f(lambda x: x*2) (x))  # 10
View Code

总结:f-string的格式化输出更加简洁,方便,易读。而且他的处理速度对之前的%s 或者format 有了较高的提升,所以可以使用此种格式化输出。

以上是关于函数名的使用和新版格式化输出的主要内容,如果未能解决你的问题,请参考以下文章

Python函数

有没有办法在不重复变量名的情况下将命名参数传递给格式化宏?

python函数--global,nonlocal ,新格式化输出,迭代器

C语言打字母小程序实现----笔记小记

Choroplethr 中州名的格式是啥?

c语言中的类型名和形式参数名的意义是啥