欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python入门学习笔记第八章——函数~~~

程序员文章站 2024-03-14 23:01:53
...

还是先附上学习过程中写的代码

#函数的定义需要使用关键字def,定义以冒号收尾
def greet_user(username):
	"""简单的问候语"""
	print(f"Hello,{username.title()}")

greet_user("dor.yang")

#在函数中,实参和形参是两个重要概念,实参赋值给形参是实现函数功能的重要步骤
#传递实参——位置实参,多个形参实参,位置一一对应
def like(name,idol):
	print(f"{name.title()} like {idol.title()}")

like("dor.yang","shark")

#传递实参——关键字实参
#位置实参需要位置对应,如果没有对应上就会出现输出错误,关键字实参传递给函数的是名称值对,直接在实参中就关联起来了,也就不需要注意调用实参的顺序了
like('kobe','wish')
like(idol='kobe',name='wish')

#传递实参——默认值,通过赋给形参默认值,简化函数的实参调用,在使用默认值的时候一定要注意形参顺序,有默认值的要放到后面不然是读不出来的。
def like_star(star,name="dor.yang"):
	print(f"{name.title()} like {star.title()}")
like_star('lary')
#有实参的话也会替换掉形参的默认值
like_star('lary','wish')


#函数的返回值
def get_name(fisrt_name,last_name):
	full_name=f"{fisrt_name}-{last_name}"
	return full_name
iboy=get_name('hu','xianzhao')
print(iboy)

#设置可选择的实参,用于同一个函数,输入参数数量不同的情况,通过设置一个空的默认值,实现不同参数输入下功能实现
def get_name(fisrt_name,last_name,mid_name=''):
	if mid_name:
		full_name=f"{fisrt_name}-{mid_name}-{last_name}"
		return full_name
	else:
		full_name=f"{fisrt_name}-{last_name}"
		return full_name
iboy=get_name('hu','xian','zhao')
print(iboy)

#返回字典
def lpl(player,team,age=None):
	star={'id':player,'from':team}
	if age:
		star['age']=age
	return star;
jkl=lpl('jackeylove','TES',20)
print(jkl)
qingtian=lpl('qingtian','TES')
print(qingtian)


#向函数传递列表,通过函数修改列表,如果不希望通过函数修改列表,可以在调用实参的时候给函数列表的副本(切片)
unprinted_designs=['phone','robot','dodecahedron']
completed_models=[]
def print_models(unprinted_designs,completed_models):
	while unprinted_designs:
		current=unprinted_designs.pop()
		print(current)
		completed_models.append(current)
#两种实参传递,第一种不会修改列表,第二种会修改列表
print_models(unprinted_designs[:],completed_models[:])
print(unprinted_designs)
print(completed_models)
print_models(unprinted_designs,completed_models)
print(unprinted_designs)
print(completed_models)


#传递任意数量的实参
def my_pizza(*toppings):
	print(f"i like {toppings} in my pizza")
my_pizza('cheese','peppers')

#使用任意数量的关键字实参,**user可以使函数能够接受任意数量的键值对
def profile(fisrt,last,**user_info):
	user_info['first_name']=fisrt
	user_info['last_name']=last
	return user_info
user=profile('albert','einstein',field='physics',location='princeton')
print(user)


#将函数存储在模块中,跨文件调用,import(文件名),就可以调用这个文件里面的函数了,不过需要先声明文件,再说函数名称
import func_pizza
func_pizza.make_pizza('16','cheese')
#导入特定的函数,调用的时候就不需要文件声明了
from func_pizza import make_pizza
make_pizza('16','cheese','peppers','meat')
#别名系列,用于防止重名以及名称太长的情况
from func_pizza import make_pizza as fun_1
fun_1('12','cheese','peppers')
#导入模块中的所有函数
from func_pizza import*
make_pizza('12','cheese','peppers')


#函数和循环结合例子,这部分要用到终端执行
while True:
	print("enter you name,input 'p' in any time to quit:\n")
	f_name=input("fisrt_name:  ")
	if f_name=='q':
		break
	l_name=input("last_name:  ")
	if l_name=='q':
		break
	#前面写的函数,用来将名字合起来的
	name=get_name(f_name,l_name)
	print(f"Hello,{name.title()}")

还有一个模块部分用的

def make_pizza(size,*toppings):
	print(f"\nMaking a {size}-inch pizza with the following toppings:")
	for topping in toppings:
		print(f"-{topping}")

这部分的内容确实是很多,一点点说吧。

函数定义

Python里面的函数定义关键字是def,通过def 函数名(形参):
的结构实现函数的声明和定义。
函数的使用其实和C的内容都相对接近,包括默认值的用法,位置实参的用法,都是一样的。就不多说了。
值得一提的是关键字实参,这个是我第一次见到这样的写法,不过实用意义也就那样。
在函数使用的过程中要确定实参形参的对应,防止出现实参错误。

函数的返回值和列表

这部分的话也是和C差不多,返回值的类型有很多,字典列表,字符串什么的都可以。
通过函数可以对列表进行修改,也可以禁止修改,这部分在代码的注释上说的挺多的了。这里就过了。

任意数量的实参

函数的实参有时候是不确定的,就需要使用*形参的格式才实现实参的存储和使用。

模块

之前C的时候通过多个文件之间include实现跨文件的函数调用,而在Python中间,import关键字提供了跨文件调用函数的功能,具体的几个方法在代码中都有提到了。

这次写的有点过于简陋,实在是这部分的内容比起前面的开始多了起来,用的时间多了一些,不过代码注释写的还是挺详细的(捂脸)