python3基础语法及实例demo——函数

函数定义

① 表示事先把需要运行的逻辑存到函数中,提取变化的部分。用于封装一段逻辑;
② 作用:组织代码,提高代码复用率;
③ 格式,其中参数可为空或者多个

def 函数名(形参1,形参2,...):
	"""注释,函数说明"""
	函数体
	return 返回值

④ 函数命名

  • 函数名称是标识符的一种,字母数字下划线
  • 遵循蛇形(下划线)命名
  • 见名知意
  • 如果函数名称不能很好表达函数意义,可通过函数注 释说明意思

⑤ 函数定义的时候函数体中的代码不会执行

函数调用

① 使用函数的过程叫做调用函数
② 格式:

函数名称(实参1,实参2,...)

#函数调用时才会执行函数体

TODO:注意事项
① 一个模块(一个.py文件)中不要定义多个同名函数,同名的情况后面会把前面覆盖掉
② 函数执行到return,会终止执行

函数传参

TODO:首先区分一个概念,函数定义的参数叫形参,函数调用的参数叫实参
① 位置参数,实参按位置顺序和形参一一对应,不能交叉

>>> def sub(a,b):
	return a-b
>>> sub(1,3)
-2

② 关键字参数,函数调用时使用,直接通过=将实参赋值给形参,不考虑位置

>>> def sub(a,b):
	return a-b
>>> sub(b=9,a=13)
4

tip:位置参数在前,关键字参数在后

>>> sub(b=3,1) #关键字和位置参数顺序不正确
SyntaxError: positional argument follows keyword argument
>>> sub(1,b=3)
-2

③ 默认参数,函数定义时给形参一个默认值,作用:函数调用时少写实参。函数调用时该参数不传参就用默认参数,有传参就用实参。

>>> def sub(b,a=10):
	return a-b

>>> sub(3) #默认参数a不传参使用默认值10
7
>>> sub(3,11) #默认参数a传参使用实参11
8

tip:位置参数在前,默认参数在后
④ 不定长参数 ‘*’ 和 ‘**’

  • 在一个形参前面加*号,函数调用时收集所有没配对的实参集合为一个元组传参到该形参,只收集位置参数
  • 在一个形参前面加**号,函数调用时所有没配对的关键字实参集合为一个字典传参到该形参,只收集关键字参数
>>> def method(a,b,*c):
	print(a)
	print(b)
	print(c)
>>> method(1,2,3,4,5,6) #没有配对的3,4,5,6
1
2
(3, 4, 5, 6)

>>> def method(a,b,**c):
	print(a)
	print(b)
	print(c)
>>> method(1,2,d=3,c=5)
1
2
{'d': 3, 'c': 5}

>>> def method(a,b,*c,**d): # *和**可以组合使用
	print(a)
	print(b)
	print(c)
	print(d)
>>> method(1,2,3,4,5,d=10,e=100,f=9) #*收集 位置参数,**收集关键字参数
1
2
(3, 4, 5)
{'d': 10, 'e': 100, 'f': 9}

⑤ 拆包,函数调用时使用。列表和元组实参通过*拆包为位置参数,字典实参通过**拆包为关键字参数

>>> def marry(male,female):
	print(f"""{male}和{female}结婚了""")
	
>>> marry("王子","公主") #普通位置参数传参
王子和公主结婚了
>>> marry(*["王子","公主"]) #列表拆包传参
王子和公主结婚了
>>> marry(*("王子","公主")) #元组拆包传参
王子和公主结婚了
>>> marry(**{"female":"公主","male":"王子"}) #字典拆包传参,注意字典的key要和函数的形参对应
王子和公主结婚了

函数返回值

  • 函数体执行以后得到函数返回值
  • 函数返回值有且只能由return决定
  • return的值是给函数的调用方使用的,对函数自身的计算无影响
  • 函数体中return后面的语句不执行

内置函数

可通过官方文档查看所有内置参数及说明,以下只列举几个常用的
https://docs.python.org/zh-cn/3.8/library/functions.html

  • print() # 打印
  • input() # 用户输入
  • type() # 返回对象数据类型
  • sorted() # 从小到大排序,返回一个排序后的列表
  • max() # 求最大值
  • min() # 求最小值
  • sum() # 求和
  • enumerate() # 获取列表索引和值
  • eval # 去掉一个字符串的引号(俗称脱衣服),变成python可执行代码
>>> print(eval("4>5"))
False
  • range() # range 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。取头不取尾,第三个参数为步长,逻辑类比切片
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(1,50,5))
[1, 6, 11, 16, 21, 26, 31, 36, 41, 46]
>>> list(range(0))
[]
>>> list(range(0,-10,-1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
  • zip() #将2个序列(如列表、元组)元素一一对应起来,多余的去掉
>>> lst_1 = ["今天","明天","后天"]
>>> lst_2=["9号","10号","11号","12号"]
>>> zip(lst_1,lst_2)
<zip object at 0x00000000029CCC40>
>>> list(zip(lst_1,lst_2))
[('今天', '9号'), ('明天', '10号'), ('后天', '11号')]
>>> tuple(zip(lst_1,lst_2))
(('今天', '9号'), ('明天', '10号'), ('后天', '11号'))
>>> dict(zip(lst_1,lst_2))
{'今天': '9号', '明天': '10号', '后天': '11号'}

作用域

① 函数内部叫局部作用域,函数外部叫全局作用域

  • 局部变量不能在全局作用域获取
  • 局部作用域可以直接使用全局变量
>>> c=2
>>>> def mm(a,b):
	return a+b-c
	
>>> mm(10,20)
28

② 函数内部可以修改全局变量,但需要先用global声明变量是全局变量

>>> c=2
>>>> def minus(a,b):
...     global c
...     c=a+b-1
...     return c
>>> minus(2,4)
5
>>> c
5

函数相互调用

  • 指在函数内部调用另一个函数,下面举个无营养的小demo
>>> def max_(a,b,c):
	return max(a,b,c)+1

>>> def max_2():
	print(max_(3,4,5),"给最大值加1")
	
>>> max_2()
6 给最大值加1
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow是谷歌开发的一个开源机器学习框架,Python是一种广泛使用的编程语言,两者结合起来可以实现深度学习,自然语言处理,计算机视觉等多个领域的应用。本文将提供一个TensorFlow Python3 Demo实例,介绍如何使用TensorFlow实现MNIST数字识别任务。 首先,我们需要安装TensorFlow和其他必要的依赖项。可以使用pip命令直接进行安装,示例代码如下: ``` pip install tensorflow matplotlib numpy ``` 接下来,我们需要导入必要的库和模块: ``` import tensorflow as tf import matplotlib.pyplot as plt import numpy as np ``` 现在,我们可以开始构建模型。这里我们采用经典的卷积神经网络(CNN)架构,包括卷积层,池化层,全连接层和dropout操作。其中,卷积和池化层用于提取图片的特征,全连接层用于分类,dropout层用于防止过拟合。 ``` model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) ``` 在构建模型后,我们需要对其进行编译,即选择损失函数,优化器和评估标准。这里我们选择交叉熵作为损失函数,Adam优化器和准确率作为评估标准。 ``` model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 接下来,我们需要加载数据。MNIST是一个手写数字数据集,包含0-9十个数字的灰度图像,每张图片的大小为28x28。我们可以使用TensorFlow提供的API方便地加载数据。 ``` mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) ``` 在加载数据后,我们可以开始训练模型。这里我们使用fit方法进行训练,指定训练数据,验证数据,训练轮数和批次大小。 ``` history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), batch_size=32) ``` 最后,我们可以使用matplotlib库绘制损失函数和准确率的变化趋势。 ``` plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.legend() plt.show() plt.plot(history.history['accuracy'], label='Training Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.legend() plt.show() ``` 完整的TensorFlow Python3 Demo代码如下: ``` import tensorflow as tf import matplotlib.pyplot as plt import numpy as np model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) history = model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test), batch_size=32) plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.legend() plt.show() plt.plot(history.history['accuracy'], label='Training Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.legend() plt.show() ``` 通过以上示例,可以很好地了解如何使用TensorFlow实现一个数字识别任务。当然,TensorFlow还有很多其他功能和API,需要更深入的学习和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值