ROSS RHEINGANS-YOO: Hi, tôi là Ross. Và đây là một hội thảo CS50. Nó sẽ đưa bạn từ lập trình trong C để lập trình Python. Python là một ngôn ngữ kịch bản. Đó là phần lớn như C trong cú pháp, mặc dù một số của các chi tiết kỹ thuật của làm thế nào mà cú pháp được thực thi là hơi khác nhau. Đó là chưa mạnh mẽ hơn so với C trong một số cách. Nó là ít diễn cảm cho nơi chính xác trong máy tính của bạn bộ nhớ được đặt ra, làm thế nào nó được đặt ra, khi nó được tự do, và những loại vật. Đó là hữu ích hơn C trong một số cách, bởi vì nó dễ dàng hơn để chương trình. Đây là ngôn ngữ, một số người, trực quan hơn. Và thực sự, mục đích là để nó được nhanh hơn để chương trình và có khả năng chậm hơn để thực thi. Bây giờ nếu bạn suy nghĩ về số lượng thời gian bạn chi tiêu vào cuối cùng của bạn vấn đề thiết lập bằng văn bản mã của bạn chống lại các số lượng thời gian bạn dành về vấn đề cuối cùng của bạn thiết lập thực thi mã của bạn, bạn tưởng tượng rằng ngôn ngữ đó là nhanh gấp hai lần để viết, và hai lần như chậm thực hiện, có thể là một cải tiến hơn C trong một số cách. Chắc chắn khi bạn đang cố gắng để viết chương trình nhỏ để làm những việc nhỏ, Python là một ngôn ngữ hữu ích của sự lựa chọn. Và vào cuối này hội thảo, tôi hy vọng bạn sẽ có thể làm cho các sự lựa chọn trong dự án tương lai về ngôn ngữ là đúng để sử dụng, không phải là ý tưởng rằng một ngôn ngữ là hơn sửa chữa tất cả các thời gian. Một vài điều về những gì các buổi hội thảo là. Hội thảo này không nhằm mục đích dạy cho bạn Python từ đầu. Python là rất tương tự C, và tôi giả định rằng bạn là một sinh viên CS50, hoặc một người nào đó với một sự quen thuộc tương tự với C. Nếu bạn là sinh viên CS50 xung quanh vấn đề đặt 6, như vậy bạn đã nhìn thấy rất nhiều mọi thứ trong C, tôi sẽ cung cấp cho bạn sự khác biệt lớn, và một số trong những điều mà làm cho Python khác nhau và đặc biệt và hữu ích, nhưng tôi sẽ không đi cho những gì một ngôn ngữ lập trình là và làm thế nào để viết chương trình. Tuy nhiên, hội thảo này sẽ dạy bạn viết một chương trình Python nếu bạn là một trong số ít những nhóm. Một lần nữa chúng ta sẽ xem xét cách bạn sẽ thực hiện psets-- mà nên là 1-6 trong Python-- và cung cấp con trỏ đến tài liệu chính thức để tham khảo trong tương lai. Một điều khác đó là quan trọng về cách nói chuyện này được phân công, video này sẽ được trực tuyến, lịch sự của CS50, vì vậy bạn không nên cảm thấy như bạn cần phải ghi chép. Bạn luôn có thể quay trở lại và nhìn tại nó sau này như một tài liệu tham khảo. Ngoài ra các slide có sẵn ngay bây giờ tại trang web này, mà nên đưa bạn làm một doc Google. Đó là một phiên bản rút gọn nhẹ những gì tôi đang hiển thị trên màn hình. Một điều lưu ý cẩn thận trước khi chúng tôi nhảy vào, Python 3 là một ngôn ngữ khác nhau từ Python 2. Họ trông rất giống nhau; có khác biệt kỹ thuật rất nhẹ mà sẽ gây ra các chương trình viết bằng Python 2 không để có thể được thực thi trong môi trường Python 3. Các thiết bị đi kèm với CS50 Python, theo mặc định nó sử dụng Python 2. Bạn có thể kiểm tra điều này bằng cách gõ vào dòng lệnh của bạn python --version, mà nên đầu ra 2.7.6 trên thiết bị hiện nay. Hãy thử Python 3, mà không làm việc trong các thiết bị, nếu Python mặc định 2.X.Y, hoặc các thiết bị hoặc trên máy của riêng bạn. Bạn nên thay thế Python 3 bất cứ lúc nào trong buổi nói chuyện này mà tôi viết Python. Nếu máy tính của bạn là chạy 2 theo mặc định, loại Python 3 để có thể thực sự theo cùng và thực hiện những điều này. Ngoài ra, tôi sẽ chỉ cho bạn tại nguồn chính thức bây giờ. docs.python.org/3--~~V cẩn thận rằng đó là một 3 và không một 2-- có tài liệu tham khảo hữu ích. Hướng dẫn sẽ đưa bạn qua nhiều những điều tương tự mà tôi đang làm bây giờ, ngoại trừ ở dạng văn bản. Tài liệu tham khảo hữu ích như là một tham khảo cho các ngôn ngữ, và thư viện chuẩn cho phép bạn một số các phần mở rộng với chức năng bổ sung. Vì vậy, một chương trình Python đầu tiên. Trên trái chúng ta có tiêu chuẩn C, bên phải, chúng ta có Python. Bạn có thể nhận ra vấn đề này, đó là một trong những vấn đề đầu tiên bộ trong CS50, và các giải quyết nó bằng cách sử dụng giải pháp tương tự. Bây giờ, lý do mà chúng tôi nhìn vào những cánh là vì chúng ta có thể nhìn vào sự khác biệt cú pháp. Một trong những con voi trong phòng mà bạn có thể thấy ngay off the bat, đó là Python không có Chức năng chính bao bì xung quanh mã. Vì vậy, trong C, bạn viết một bó file, bạn liên kết chúng lại với nhau, và các chương trình bắt đầu thực hiện tại điều này được gọi là int main. Trong Python, bạn viết một file bạn, hãy thực hiện các tập tin, chương trình bắt đầu thực hiện ở phía trên cùng của tập tin. Vì vậy, nó sẽ bắt đầu ở trên cùng của tập tin đi xuống cho đến khi nó tìm thấy một cái gì đó khác. Nếu nó tìm thấy một định nghĩa chức năng, nó sẽ không thực sự thực thi mã, nó chỉ đơn giản sẽ xác định các chức năng. Nhưng ở đây, khi lần đầu tiên chương trình là n bằng 10, điều đầu tiên mà chương trình này sẽ làm là lấy giá trị này là 10 và đặt nó vào một biến gọi là n. Nói về dòng, một trong khác things-- sorry-- này có nghĩa là chương trình C, bạn sẽ viết chúng, bạn sẽ làm cho họ, mà sẽ gọi một số lệnh kêu vang, và sau đó bạn sẽ chạy một kết quả thực thi. Chương trình Python, bạn chạy văn bản file-- mario.py điều này có thể được tập tin này mà tôi chỉ thấy you-- bạn sẽ chạy tập tin đó và bạn sẽ thực hiện, và nội dung của nó sẽ được thực hiện bởi các thông dịch Python. Bạn có thể làm điều này trong IDE của bạn. Vì vậy, nếu tôi có một tập tin Hello, mà chỉ đơn giản có nội dung này. Đây thực sự là Python 2, không Python 3, do đó, không lo lắng về cú pháp cho doanh nghiệp. Nhưng tôi sẽ chạy Python, trên hello.py, và nó chạy. Một cách khác mà tôi có thể sử dụng Python Tôi sẽ phải đối phó với quá nhiều trong buổi nói chuyện này, là nếu tôi chỉ cần gõ Python, nó giọt tôi vào một môi trường nơi Tôi có thể ăn nó dòng Python bởi dòng. Vì vậy, ở đây, nếu tôi gõ in không gian 'hello, world'. Gõ Enter. Nó sẽ nhổ tôi rằng sao kết quả rằng dòng cá nhân ngay lập tức. Điều này là có thể có ích. Trong buổi nói chuyện này, tôi sẽ làm những việc trên slide. Và như vậy bạn sẽ có thể làm theo cùng hoặc là ở đây, hoặc bằng cách viết tập tin thực tế và sau đó thực hiện chúng. Nhưng, sẽ trở lại này mã, điều khác mà bạn có thể có noticed-- tốt, có hai điều mà có lẽ bạn thông báo về các khối. Việc đầu tiên, chứ không phải trần tục hơn, đó là Python không có dấu chấm phẩy dấu. Dấu chấm phẩy là tùy chọn ở khắp mọi nơi và vô hại ở khắp mọi nơi. Bạn có thể thêm chúng. Nó có thể làm cho những người viết Python cho một snicker sống tại bạn đằng sau lưng của bạn, bởi vì họ không cần thiết. Họ thường là một dấu chỉ được tổ chức trong từ C. Các nhà thiết kế của ngôn ngữ cảm thấy rằng nó là rõ ràng hơn theo cách này và rằng nó không cần thiết phải khai báo mỗi khi bạn kết thúc một dòng. Một điều kỳ lạ về n này là nó không có một loại kèm theo. Một trong những phần kỳ diệu của Python-- và tôi sẽ gọi nó là ma thuật, nhưng có rất lý do tại sao kỹ thuật nó works-- một trong những miếng diệu của Python là các biến có thể mở rộng hoặc thu nhỏ để chứa bất cứ dữ liệu loại bạn sẽ muốn họ. Vì vậy, đây là một 10. Nếu sau đó xuống tôi giao cho này n 0.5, nó sẽ mất rằng 0,5. Không có vấn đề mà nó là một int đây nổi ở đó, bất cứ điều gì mà sử dụng n này sẽ, nhiều hơn hoặc ít hơn, có thể chug cùng nếu nhận được một trong những người. Trừ khi có một số rất thực tế lý do tại sao nó không thể sử dụng các dữ liệu gõ mà n hiện có, lúc đó nó sẽ nhận được rúc và ném ra một lỗi, và những loại vật. Nhưng ở đây, Python không thực sự quan tâm những gì nó là tôi sẽ dính vào trong này câu, như thế, bạn muốn điều này? Điều này trong đó? Vâng, đó là loại một điều. Tôi sẽ gắn bó nó cuối cùng. Nó sẽ là một vấn đề sau này, nếu là người muốn sử dụng cuối cùng mà không thể xử lý nó. Đây là một trong những chính sự khác biệt giữa Python và C mà làm cho nó dễ dàng để viết chương trình C lớn và làm cho nó dễ dàng hơn để viết chương trình Python rất nhỏ. Các cú pháp không phải là rất khác nhau ở những gì nó. Nó hơi khác nhau trong cách nó thể hiện. Vì vậy, đây là một rất, những gì được gọi là Pythonic, cách viết nó. cho hàng trong phạm vi (n), đây là loạt các con số từ 0 đến n, bao gồm trên dưới cùng và độc quyền trên đầu trang. Vì vậy, nó là từ 0 đến n-1, đó là chính xác những gì các mã C đang làm, ngoại trừ nó dễ dàng hơn rất nhiều nhìn vào có lẽ. Các khối có liên quan là không đặt ra bởi niềng răng, thay vì nó đặt ra bởi vết lõm này. Vì vậy, tất cả những dòng này là bốn không gian trên bên phải, hoặc như về chiều rộng con voi. Và đó chính là những người thân mà là sẽ được thực hiện trong này cho. Nếu tôi mess lên indentation về điều này và tôi đẩy in mà trở lại lõm ban đầu, in mà sẽ để lại cho vòng lặp. Ngược lại với C, nơi đây tôi thực sự cần để di chuyển mà cú đúp khép kín xung quanh. Điều này có nghĩa rằng bạn không nhận lỗi mà nhảy ra ở bạn vì bạn đặt một nẹp tại chỗ sai. Nó có nghĩa là bạn nhận được lỗi mà nhảy ra ở bạn vì bạn thụt vào một sai đường. Vì vậy, nó làm cho vết lõm siêu cẩn thận. Hy vọng rằng bạn đã được siêu cẩn thận với indentation của bạn anyway, và như vậy đây không phải là nhiều hơn nữa của một gánh nặng. Nhưng một nguyên tắc cơ bản cho Python, và chúng tôi sẽ có một vài trong số này rằng chúng ta sẽ đi qua qua quá trình nói chuyện, đang cố gắng cú pháp tự nhiên trước khi tìm kiếm bất cứ thứ gì lên. Vì vậy, cú pháp này, cho con số này trong phạm vi, là rất khác biệt về phong cách. Rất nhiều điều trong Python chúng ta sẽ thấy dùng hình thức này. Và do đó, nếu bạn đi lên với một đối tượng mới đó bạn nghĩ rằng bạn sẽ có thể lặp trên này, ở định dạng này, Hóa ra nó có thể hỗ trợ định dạng đó. Chúng tôi sẽ không đi siêu sâu trong những lý do tại sao kỹ thuật đó là sự thật. Nhưng đó là một trực giác hữu ích để có khi bạn đang tiếp cận các chương trình Python, mà điều này chỉ là đi làm việc. Thử nó. Khởi động các dòng lệnh Phiên dịch, xem nếu nó hoạt động, di chuyển về với mọi thứ, trước khi bạn thậm chí cần phải mở lên Google và nói, cú pháp cho những gì điều đặc biệt này? Rất nhiều bạn có thể Python khám phá chỉ bằng cách cố gắng. Điều này nếu là thậm chí nhiều hơn tương tự C thì fors là. Lưu ý rằng không có dấu ngoặc đơn. Các dấu ngoặc đơn là, một lần nữa, vô hại nhưng không cần thiết. Có một dấu hai chấm ở cuối giống như các vòng lặp for, và một lần nữa, các khối tương đối được thụt vào chứ không phải đặt ra bởi niềng răng. Khác này là bản gốc mức độ thụt đầu dòng, và khối có liên quan của nó thụt một lần nữa. Những công việc chính xác như họ làm trong C. Điều này thực sự là rất nhiều như nhau. Một lần nữa, in mất một nhân vật tắt của printf Bạn vượt qua một số dây. Nó chỉ ra chuỗi hoặc có thể được khoanh bởi dấu ngoặc đơn hoặc dấu ngoặc kép. Không có sự khác biệt, ngoại trừ bên trong mà của dấu ngoặc kép duy nhất bạn có thể sử dụng dấu ngoặc kép với từ bỏ, thay vì phải thoát tất cả chúng. Và bên trong dấu ngoặc kép, bạn có thể sử dụng dấu ngoặc đơn với từ bỏ mà không cần phải thoát khỏi chúng. Nếu bạn muốn kết hợp chúng, bạn có thể chắc chắn tìm kiếm trực tuyến như thế nào để làm điều đó. Bạn sẽ nhận thấy rằng ở đây, Tôi đã được thông qua vào cuối = điều này. Đây là một ví dụ về một tùy chọn đối số, đó là một trong những điều rằng Python hỗ trợ mà làm cho nó khá hữu ích. Vì vậy, in thực sự có rất nhiều đối số, mà thường thiết lập để mặc định của họ giá trị, nhưng ở đây tôi đã quyết định để ghi đè lên một gọi là kết thúc. Lý do mà tôi phải ghi đè lên nó bằng một chuỗi rỗng là in trong Python, bởi mặc định, in ra một dòng mới sau khi điều mà bạn nói với nó quá. Vì vậy, băm này là thực sự đi vào in ra một hash trong một dòng mới. Và nếu tôi không muốn băm để in ra một dòng mới sau khi nó, sau đó tôi phải nói không in một. Nhưng, nhưng vì vậy, một trong những điều cuối cùng mà Chương trình này là mất tích mà người ta là một bao gồm ở đầu trang. In được nướng vào Python nên về cơ bản rằng không có tiêu đề hoặc mô-đun mà bạn cần bao gồm, mặc dù nếu muốn để bao gồm những thứ khác trong một kịch bản Python, Tôi sẽ làm điều đó trong một dưới định dạng rất giống nhau những lời chỉ là một chút khác nhau. Tôi đã đề cập rằng chúng ta không cần một chính ở đây, vì Python bắt đầu thực hiện ở đầu trang. Nếu tôi muốn để bọc này trong một hàm, tôi sẽ làm nó như this-- tôi sẽ nói def tên hàm, đối số có thể đi ở đây và chúng tôi sẽ xem một số những người sau này, đại tràng, và sau đó một lần nữa, điều này toàn bộ khối đặt ra là những gì là hoạt động chặn cho chức năng đó. Vì vậy, đây là định nghĩa của hàm. Và có một tuyên bố, sau đó xuống ở đây, tôi chỉ có thể gọi hàm. Và một lần nữa, các chương trình thông dịch viên, bắt đầu từ đầu, sẽ thấy đây là định nghĩa. Nó sẽ không thực hiện điều này cho đến khi nó nhận được ở đây, và sau đó nó giống như, oh bây giờ bạn đã gọi nó, tôi đoán tôi nên thực hiện nó. Một điều đó là rất phổ biến để xem trong file Python, đặc biệt là các file Python được phát hành ra công chúng và phát triển tuỳ theo trường và phát triển và duy trì, là một cái gì đó của hình thức này. Đây là basically-- như vậy bởi vì Python, bạn bắt đầu ở đầu và sau đó bạn thực hiện xuống phía dưới, Tôi nếu tôi chỉ có Mario gọi ra ở đây, Sau đó bất cứ lúc nào tôi bao gồm tập tin này trong tập tin khác, bởi vì tôi muốn sử dụng Mario là chức năng, tập tin khác sẽ cũng có cuộc gọi này để Mario trong đó. Và khi tôi chạy tập tin đó, nó sẽ gọi Mario. Vì vậy, nó có thể là tôi chỉ muốn chạy này nếu tôi đã thực sự thực thi tập tin này. Và vì vậy tôi thể bọc này trong một thành ngữ như thế này, nơi mà tôi nói, nếu tên của thi này môi trường là chính, sau đó tôi muốn làm những điều này. Nếu ai đó có thể use-- bao gồm function-- của tôi tập tin của tôi, và chỉ để có được truy cập vào các chức năng này mà không cần phải chạy những điều mà tôi muốn thực hiện trong tập tin này. Điều này, một lần nữa, tùy chọn nhưng rất phổ biến. Những điều này là entirely-- là chính xác như nhau giữa C và Python, chắc chắn trong 3. Tôi nghĩ rằng trong 2, các nhà điều hành bộ phận đôi khi mang đến cho bạn nổi khi bạn hoạt động trên ints, và một trong hai bạn muốn điều đó hoặc bạn đã không. Nhưng cộng, trừ, và lần việc chính xác như bạn mong muốn, ngoại trừ đối với các loại nhẹ hơn. Vì vậy, bạn có thể nhân thành bè ints, và những loại vật. bộ hoạt động chính xác như nhau. Bạn có thể sử dụng hai dấu bằng. inequals-- lớn hơn ít hơn, hơn, những loại things-- có nghĩa rằng bạn đã quen thuộc với họ. Trường hợp C sử dụng các nhà khai thác, Python sử dụng nhiều hơn một chút tiếng Anh những người có thể đọc được. Vì vậy, thay vì hai, ký hiệu, bạn nghĩa đen gõ từ "và", "hoặc," Hay không." Giống như trong if-- của bạn trong của bạn câu điều kiện, chúng ta đã thấy rằng cú pháp này trong C tương ứng với cú pháp này trong Python. Và có không nhiều khác nhau ở đó, ngoại trừ một chút các dấu câu quanh hai bên. Một lần nữa, trong đó C sẽ khác nếu, Python sử dụng elif, nhưng đây là chủ yếu thay đổi mức độ bề mặt. Lặp đi lặp lại như thế này thường là viết bằng thành ngữ này ở Python. Bạn có thể sản xuất loại này điều với một vòng lặp trong khi ở bên ngoài nếu bạn muốn, nhưng bạn chắc chắn không phải. Và một lần nữa, nếu bạn muốn in ra các phần tử trong một mảng bạn có thể làm theo cách này. Một trong những điều thú vị về Python mặc dù, là bạn không cần sử dụng mô hình này, và bạn có thể sử dụng một một chút thanh lịch hơn. Bạn nói cho một trong ary. Vì vậy, thay vì đi đây và chạy trên các chỉ số, và sau đó kéo ra yếu tố cá nhân, bạn cho biết cho đến thực sự chỉ chạy qua các phần tử tự. Và sau đó bất cứ điều gì bạn đang làm trong có thể hoạt động trực tiếp trên các yếu tố, mà là khá vui vẻ. Và chúng tôi sẽ see-- chúng ta sẽ sử dụng rằng thành ngữ một lần nữa và một lần nữa khi chúng tôi đi bộ qua mã. Điều này, một lần nữa, một ví dụ của một cái gì đó mà tôi sẽ gọi Python ma thuật, mặc dù có lý do rất kỹ thuật tại sao nó hoạt động. Và có những thứ kỹ thuật cần phải có thật về mảng theo thứ tự này để làm việc đằng sau hậu trường. Cái này là hầu hết các loại mà bạn mong muốn làm việc này đã có điều này thực hiện cho bạn trong các ngôn ngữ được xây dựng trong. Một điều mà nó sẽ được tốt đẹp nếu điều này làm việc trong mọi ngôn ngữ, nhưng có một số lý do tại sao nó không thể, in chuỗi này lần con số này. Hóa ra trong Python, điều này không chính xác những gì bạn muốn, mà chỉ là niềm vui, và có nghĩa là chúng ta có thể thực sự giảm chương trình này, một lần nữa mario.c. Thay vì lặp rất nhiều, chúng ta có thể chỉ cần nói, tôi muốn có một số số lượng không gian, Tôi muốn số của băm, và một số hash ở cuối. Và một lần nữa, chúng tôi sử dụng định dạng này. Dưới đây, chúng tôi đang đi trong một biến theo cách này. Một lần nữa, chúng tôi không cần phải nói loại biến đó là, và thời gian duy nhất chúng tôi sẽ nhận được lỗi là tại thời gian chạy. Khi ai đó cố gắng để vượt qua một cái gì đó trong, nó sẽ đi vào các chức năng tốt. Nếu chúng ta nêm ở đây vì đây không phải là điều mà bạn có thể tạo ra các phạm vi trên, Tôi sẽ nhận được một lỗi thời gian chạy có, và tôi sẽ phải gỡ lỗi nó theo cách đó. Nhưng trong khi chờ đợi, tôi không có phải rất cẩn thận về những gì được thông qua tại, miễn là trong thực tế thực hiện tất cả các công trình rất sạch. Tôi thậm chí có thể thực hiện điều này một chút sạch hơn sử dụng một chức năng được xây dựng đặc biệt trên dây, mà là Căn Phải. Đây chỉ là một chức năng hữu ích nằm xung quanh thư viện. Đó là trong các tài liệu hướng dẫn nếu bạn đi và tìm kiếm nó. Và tôi nói, tôi cũng đang sắp có chuỗi này, một số số băm, và tôi muốn sang phải biện minh cho pad it-- ra với không gian được chiều dài này. Một lần nữa, điều này là trong tài liệu, trong đó tập us-- Tôi sẽ thực sự click thông qua these-- mà chúng tôi mang đến tắc thứ hai của chúng tôi cho Python-- thư viện chuẩn phương pháp chức năng là bạn của bạn. Và nó thường có giá trị trong khi của bạn đi tìm tôi tự hỏi nếu có một điều mà chỉ thực hiện điều này. Có lẽ là. Nếu bạn muốn pad ra một chuỗi, nếu bạn muốn muốn lấy lại một nửa của một chuỗi, nếu bạn muốn muốn tìm kiếm thông qua một chuỗi, nếu bạn muốn đập vỡ một vài điều cùng với một chuỗi với dấu phẩy giữa chúng, có thư viện chuẩn chức năng để làm điều này. Và nó làm cho cuộc sống của bạn dễ dàng hơn nếu bạn sử dụng chúng thay vì lăn ra tất cả mọi thứ trên của riêng bạn trong năm dòng mã ở đây, năm dòng mã ở đây. Đó thực sự bắt đầu lúc thêm đến thời gian thực. Một trong những điều thú vị khoảng cách này được gọi là. Bạn sẽ nhận thấy rằng có một điều dot. Tôi có một số đối tượng ở bên trái, và sau đó tôi gọi là một chấm một chức năng. Đây là một trong các mô hình mà Python sử dụng để gắn các phương pháp để các đối tượng. Chúng tôi sẽ nói về điều này là rất ngắn gọn ở cuối, nhưng biết rằng cả hai chúng tôi có thể hoạt động trên bằng những việc đó dot điều nói bất cứ điều gì, hoặc bằng cách gọi một chức năng mà mất đối tượng và một số đối số khác. Vì vậy, đây là cả hai cách đó điều được thực hiện trong Python. Và liệu một đặc biệt chức năng được thực hiện trong phong cách này hay này phong cách là một cái gì đó mà bạn nên tìm cho đến khi bạn nhận được một hang mà một trong đó là khả năng rơi vào. Có một ít nhiều gắn kết Triết lý đằng sau Python mà bạn hấp thụ chủ yếu bằng cách viết rất nhiều trong đó. Tại một số điểm, mà một trong những một cái gì đó sẽ được thực hiện như trở nên tự nhiên. Để bây giờ, nó chỉ là cái gì bạn học hỏi như bạn tìm ra mỗi thứ riêng lẻ. Vì vậy, tiêu chuẩn thư viện chức năng là bạn của bạn, và họ cho phép bạn viết điều đó mất nhiều không gian này thực sự trong thời gian ngắn, thực sự thanh lịch. Và điều này thực sự có lẽ nhiều hơn dễ đọc, tôi muốn nói, so với các chương trình C đằng kia. Không đề cập đến một thực tế là như vậy ngắn bạn có thể phù hợp với cả một con voi trong không gian mà chúng tôi đã lưu. Một điều khác, đây là một thực hiện của Mario đó là dấu chấm C, mà tôi nghĩ là ngắn nhất bạn có thể có được nó. Nó không có int get, nhưng nó cứng mã giá trị của 10 cùng một cách mà một này nào. Hóa ra rằng đây là một đồng hồ trong lúc 84 nhân vật, trong khi Python là 64. Và điều này là vô cùng dễ đọc hơn so rác này ở đây. Vì vậy, Python là hiệu quả hơn trong không gian. Nó hơi kém hiệu quả trong thời gian, nhưng không nhiều. Danh sách là một điều quan trọng trong Python. Chúng tôi đã không nhìn thấy họ, nhưng họ hoạt động giống như các mảng làm trong C. Vì vậy, ở đây, bạn có thể khai báo, bạn có thể chuyển chúng vào một điều. Bây giờ hình vuông có bằng mảng của những điều này. Một lần nữa, chúng tôi đã không khai báo là loại, nhưng nếu chúng ta cố gắng sử dụng nó, bất cứ điều gì mà bạn mong muốn làm việc trên một mảng các số nguyên là đi làm việc trên một mảng các số nguyên. Đây có phải là một điều mà bạn hoàn toàn không thể làm trong C, vì bộ nhớ nó là như vậy tay trên, nhưng là rất dễ dàng để làm trong Python. Nếu tôi muốn mảng của tôi được lớn hơn, tôi có thể nối thêm một yếu tố để nó và nó là tốt. Điều gì đang xảy ra đằng sau hậu trường? Thông dịch viên sẽ đi ra và nhận được một số bộ nhớ, và có thể nó sẽ có được một chút chút về bộ nhớ thêm, vì vậy tôi không vì vậy tôi không có để realloc mỗi lần. Nhưng bao nhiêu có nhiều bộ nhớ nó cần? Đây không phải là quyết định mà bạn phải thực hiện, đây là những quyết định mà thông dịch viên được đi làm. Ở đây chúng ta thấy phạm vi có thể lấy hai tham số, nhưng nó vẫn sẽ được bao gồm của đầu vì vậy chúng tôi có thêm 1. Đây là một thành ngữ, mà là một thậm chí nhiều hơn cách thông minh để viết những thứ như thế này. Nó được gọi là hiểu danh sách, và ở đây những gì chúng ta đang nói là tôi muốn đặt trong i bình phương cho mỗi giá trị của tôi trong phạm vi này. Điều này bên phải có thể là một mảng, và điều này trên bên trái là bất kỳ chức năng nói riêng vì phải chờ đến tôi như là một biến và cho tôi ra kết quả một số. Những gì tôi đang đi làm là, Tôi sẽ xây dựng một mảng đó là tất cả những điều này cho mỗi giá trị trong phạm vi này. Và đây là siêu thanh lịch, siêu ngắn, và nó rất rõ ràng ý nghĩa của nó. Đây là một trong những things-- này là một lần nữa, một of-- rất tiêu biểu cho sự lý do mà những người như Python. Nếu bạn đam mê lập trình như thế này, sau đó Python là một ngôn ngữ mà bạn có thể muốn tìm hiểu. Và một lần nữa, có kỹ thuật lý do tại sao các công trình này. Nhưng theo như chúng tôi đang quan tâm, chúng tôi ít nhiều không quan tâm. Vì vậy, nếu bạn muốn in ra danh sách, một số các thành ngữ cùng hữu ích. Cho i trong phạm vi này, chúng ta có thể Chỉ số thông qua tất cả những điều và sau đó in ra tất cả ra. Và bạn sẽ thấy len ở đây. Nếu bạn đã bao giờ muốn để có được chiều dài của mảng, đó là rất dễ dàng trong Python, nó rất khó trong C. Điều này sẽ in ra chính xác những gì bạn mong đợi nó đến. Chúng tôi cũng có thể, như chúng ta đã thấy trước đây, duyệt qua các phần tử trong mảng trực tiếp, và sau đó chỉ cần nói về họ, hơn là có các chỉ số trở lại vào mảng mỗi lần. Và đây là một thứ mà bạn có thể làm. Vì vậy, trong C, nếu bạn hỏi một cái gì đó như thế này, bản in sẽ nói, đó là một mảng các số nguyên. Đó chắc chắn không phải là một chuỗi, tôi không thể in nó. Python nhiều hay ít không quan tâm. Nó giống như là có một cách mà tôi có thể tắt tính năng này trong một chuỗi? Vâng, tôi sẽ làm điều đó. Và vì vậy tôi sẽ chỉ in mà ra. Điều này có nghĩa rằng bạn có thể làm những việc like-- những là hầu hết các phần cứng của trò chơi của lăm, bằng văn bản rất ngắn gọn trong Python. Bạn sẽ thấy rằng có một chút of-- đây Tôi đã bỏ một số nguyên cho một chuỗi, và tôi phải làm điều đó bằng tay. Và tôi sẽ bổ sung thêm nó vào chuỗi khác, hoặc Python bị nhầm lẫn. Nhưng cho dù khi bạn đang thêm một chuỗi số nguyên, tôi cho rằng để có được một số nguyên lưng hoặc một chuỗi trở lại? Nhưng một lần nữa, nếu bạn chỉ gọi str vào một điều, và nó có thể ở bất kỳ thể thế giới được chuyển đổi thành một chuỗi, nó có thể sẽ được chuyển đổi thành một chuỗi. Ở đây, chúng ta thấy sử dụng lồng nhau hiểu danh sách bên trái, một số chỉ mục, trong đó là chính xác như bạn muốn được sử dụng nó, và một số in ra của sự vật. Một lần nữa, chúng tôi đã xác định một số chức năng và chúng tôi sẽ gọi họ xuống trong chính khi chúng ta thực sự có được các tập tin. trở lại hoạt động chính xác như bạn muốn mong đợi từ làm việc với C. Tìm, chúng ta có thể thiết lập những thứ như this-- đây là danh sách hiểu có chuyển nhượng cho một biến, và chúng tôi thực sự có thể làm điều đó dễ dàng hơn. Chúng tôi không cần phải viết tìm kiếm, vì được xây dựng trong các ngôn ngữ là nếu điều này là trong mảng này. Return true, khác trả về false. Vì vậy, đó là toàn bộ của find. Toàn bộ các loại liên quan đến việc gọi điện thoại sắp xếp, mà is-- có hiện thực điều này được xây dựng vào các thư viện C nhất định. Nếu bạn muốn điều này loại về phía sau, bạn có thể ghi đè tùy chọn này lập luận ngược lại với một sự thật. Và nếu bạn muốn sắp xếp trên dây, đó là xây dựng-in là tốt. Vì vậy, đây không phải là để nói rằng đây là những những điều mà bạn cần phải làm mỗi ngày, nhưng ý tưởng là điều này là triết lý của Python, rằng tất cả những điều mà bạn muốn loại muốn làm đều được tích hợp. Và hầu hết các chức năng tiêu chuẩn, vì vậy loại, chiều dài, bất cứ điều gì, hỗ trợ đầu vào logic hợp lý nhất. Bạn gọi len vào một mảng cùng cách bạn gọi len vào một chuỗi. Bạn bạn multiply-- sắp xếp chuỗi giống như cách bạn sắp xếp mảng. Hầu hết các chức năng tiêu chuẩn mà người dân xây dựng, và hầu hết các bên thứ ba thư viện mà mọi người xây dựng, bởi vì họ đang thi đua các thiết kế của các thư viện chuẩn, có thể được gọi là trên tất cả mọi thứ mà bạn như thế, tại sao không này chỉ làm việc, C. Nhiều hơn hoặc ít hơn, nó sẽ làm việc trong Python bởi vì mọi người làm việc phía sau để con số ra một điều là và sau đó hoạt động thích hợp vào nó. Vì vậy, một lần nữa, nền tảng kỹ thuật, nhưng nó làm cho cuộc sống của chúng tôi dễ dàng hơn như lập trình. Vì vậy, đây là tập tin I / O. nộp I / O đã có rất nhiều những điều nhỏ mà làm cho nó phức tạp, và do đó, có nguồn tài nguyên trực tuyến, nhưng trong một nutshell, bạn gọi mở vào một tập tin đặt tên với một kiểu cụ thể. Vì vậy đó là đọc, đọc và viết, viết hoặc gắn thêm. Bạn đọc một số lượng nhất định nhân vật ra ngoài và bạn in những, bạn sẽ nhận được Hello! Ý tôi là, như tập tin này có Hello! Trong đó, gọi để đọc, và những gì bạn sẽ nhận được trở lại là một chuỗi trong đó có tất cả của phần còn lại của mảng, hoặc tất cả các phần còn lại của tập tin. Nếu bạn gọi đọc một lần nữa, bạn đang ở phần cuối của tập tin, và do đó bạn không nhận được bất cứ điều gì và vì vậy bạn sẽ đóng cửa. Lại nữa, này là .close hơn đóng tập tin, vì nó sẽ là trong C. Đây là nhiều hơn hoặc ít hơn vì f là một điều, và bạn muốn cho e để đóng. Nhưng tập tin cơ bản I / O không phải là đặc biệt phức tạp. Một lần nữa, nếu bạn muốn mở một tập tin, nếu bạn muốn đọc một dòng cụ thể, bạn có thể nhận ra đặc biệt line-- có built-in cho điều đó. Nếu bạn muốn viết một điều, bạn có thể viết này. Nếu bạn muốn viết ra cá nhân cắn, bạn có thể viết những. Và nếu bạn muốn để lặp qua các đường dây của một tập tin một cá nhân, chúng tôi đã làm trong một mảnh từ một vài tuần trước đây, bạn có thể làm điều đó với. Một lần nữa, hầu hết các đối tượng mà bạn muốn thích để có thể lặp qua hỗ trợ iterating qua chúng. Trong Trăn, một tập tin có lẽ là một điều mà Tôi muốn để lặp qua từng dòng. Nếu nó là một từ điển của lời nói và tôi cố gắng để có được những cá nhân Nói cách ra ngoài, sau đó, trong vòng lặp này, dòng nó sẽ là mỗi từ trong lượt và điều này sẽ được thực hiện cho tất cả các dòng trong các tập tin cho đến cuối tập tin. Và một lần nữa, nếu tôi in ra đường, các đường đến với dòng mới, vì vậy tôi đang thiết lập cuối cùng sao để một điều như thế này. Sau đó tôi nhận được nội dung của các tập tin của tôi. Điều thứ hai mà hoạt động trong một số cách như danh sách, và trong một số cách như một cái gì đó đáng kể quyền lực hơn, những bộ từ điển, mà là thực sự mát mẻ để sử dụng, nhưng về cơ bản băm bảng trong ngụy trang. Bạn tạo ra một cách sử dụng chính xác hai nhân vật, mà là awesome nếu bạn đã cố gắng để thực hiện bảng băm cho bộ vấn đề của bạn, bạn biết nhiều nỗi đau mà có thể. Nhưng người đã làm được nó, và thực hiện nó rất tốt, mà bạn không cần phải lo lắng về điều đó nữa. Sau đó, bạn có thể chèn những điều cá nhân. Tables-- băm hoặc các từ điển không đặc biệt quan tâm những gì bạn đang lưu trữ trong đó. Vì vậy, nếu một số mục là những con số, và một số mục là danh sách, nếu một số mục những bộ từ điển khác, và một số mục là chuỗi, Python không thực sự quan tâm nhiều. Một lần nữa, nếu bạn đi vào nó mong đợi một chuỗi và những gì bạn nhận được trở lại là một mảng, đó là vấn đề của bạn. Và có lẽ đó là lỗi của bất cứ ai nghĩ rằng nó đã được đưa mọi thứ trong từ điển, có lẽ đó là bạn. Nếu đó là một người nào đó khác, hy vọng họ cư xử rất tốt về những gì đã được đi vào từ điển và không để lại bất kỳ khó khăn để bạn có thể rơi vào. Nhưng các chức năng tiêu chuẩn sẽ cung cấp cho bạn mọi thứ trở lại cư xử tốt. Vì vậy, họ nói lợi nhuận này sao một từ điển của chuỗi, sau đó tất cả mọi thứ bạn đang đi để có được ra khỏi là một chuỗi. Nếu bạn làm một số điều này và nó chuyến đi bạn lên, tốt, có thể có trong bạn. Python chắc chắn mang lại cho bạn đủ dây thừng để treo mình, nếu bạn muốn. Bây giờ chúng ta có thể in ra cá nhân phần tử này và trả về này chính xác những gì bạn mong muốn. Chính xác những gì bạn mong muốn, tôi đoán, là một cụm từ mà tôi đang sử dụng rất nhiều, nhưng đó là nhiều hay ít như thế nào Python hoạt động. Nếu bạn đòi hỏi một điều mà không phải là nó, Python sẽ ném ra một lỗi và nó sẽ bỏ bạn ra khỏi bất cứ chương trình bạn đang ở. Nó thực sự sẽ in ra thêm thông tin hơn, nó sẽ chỉ you-- nó sẽ thấy thêm một dòng, và như vậy. Và, một lần nữa, có lẽ chúng ta muốn để lặp qua các từ điển và tìm thấy tất cả những gì trong đó. Ở đây chúng ta lặp qua hai việc cùng một lúc. Và vì vậy chúng tôi sẽ làm điều đó với một khoá, giá trị, nhưng sau đó in ra tất cả các. Và nếu chúng ta muốn cast-- nếu chúng ta thực sự chạy này, chúng ta sẽ có một số rắc rối vì on-- khi chúng tôi đã đi với David, nó không thể add-- nếu chúng ta không bỏ nó vào một chuỗi đầu tiên, chúng tôi không thể thêm vào mảng đó các chuỗi vào một chuỗi. Nhưng nếu chúng ta bỏ nó vào một chuỗi, chúng ta có được một cái gì đó như thế này, đó là có thể những gì chúng ta muốn đọc. Và đây là Speller. Chúng tôi chỉ cần đọc trong sự vật. Vì vậy, chúng ta có thể đọc trong từ riêng lẻ như đường. Chúng tôi chop off cuối cùng điều, do đại tràng trừ đi 1 chomps tắt điều cuối cùng mà we-- các ký tự cuối cùng của một chuỗi. Chúng tôi sẽ nói. OK, mỗi một trong số những người được đưa vào từ điển này, lập bản đồ đến một giá trị là 1. Chúng tôi không đặc biệt quan tâm về điều đó, nhưng nó chỉ có thể nói, oh well, điều này tôi sẽ đặt trong từ điển. Bởi vì sau những gì chúng tôi sẽ làm là chúng tôi sẽ nói, tốt, nếu nó trong từ điển ở tất cả. Một lần nữa, việc kiểm tra này cho thành viên là lên điều hành sử dụng một cách hoàn toàn khác nhau thuật toán hơn là nó sẽ trong một danh sách, nhưng chúng ta gọi nó theo cùng một cách, mà là một số trong đó lớp vỏ đường Python điều để chúng dễ dàng hơn để sử dụng. Và một lần nữa, chúng tôi đã nhìn thấy những điều như thế này trước đây. Điều này về cơ bản là tìm, hoặc nó chính xác cú pháp tương tự như tìm thấy, nhưng đang hoạt động trên một cấu trúc hoàn toàn khác nhau. Và chúng tôi không đặc biệt quan tâm. Vì vậy, đó là những điều mà bạn được yêu cầu thực hiện cho Speller. Với tốc độ này, chúng ta sẽ nhận được nhiều hơn hoặc ít hơn tất cả các psets thực hiện. Đung Vì vậy mà về cơ bản chỉ trở lại như đánh vần sai nếu nó không phù hợp với điều gì đó trong từ điển? ROSS RHEINGANS-YOO: Vâng, vâng. Và như vậy, đây là một thích ứng của một vấn đề đặt mà yêu cầu bạn làm chính xác điều đó. Đung Tại sao các dòng trừ 1 có? ROSS RHEINGANS-YOO: Vì vậy, khi bạn đang iterating lên một tập tin yêu cầu bằng đường nét, các đường đi kèm với một ký tự dòng mới vào cuối it-- trừ đi 1 để mua sắm chỉ là những người ra. Và đây là một linh hoạt đặc biệt cách đánh chỉ mục vào thứ. Vì vậy, nếu bạn có một chuỗi, và bạn muốn, cũng tôi sẽ bắt đầu từ nhân vật ba và tôi sẽ đi đến cùng. 3 đại tràng sẽ làm điều đó cho bạn. Nếu bạn giống như, tôi muốn bắt đầu tại bắt đầu và đi đến trừ đi 1 cuối cùng nhân vật, đại tràng trừ đi 1. Và nếu bạn muốn đi từ thứ ba để trừ đi đầu tiên, sau đó bạn muốn nói 3 trừ đi 1. Ngoài ra, nếu bạn muốn đánh chỉ mục vào những thứ kể từ phía sau, bạn chỉ cần chỉ số với số trừ. Và bởi vì, trong đó C sẽ phát nổ hoặc có thể ăn bạn nhớ khác mà bạn không có truy cập vào, bạn có thể nghe nói trừ đi 1 có nghĩa là cuối cùng nhưng 1 ký tự trong chuỗi. Các Module version-- là tương tự với các thư viện trong C và có ích cho rất nhiều thứ. Có rất nhiều điều bạn muốn muốn làm trong Python, ngoài đơn giản thao tác của các biến, bạn muốn để móc vào thư viện lớn với hơn giao diện và nhiều hơn nữa khả năng để tương tác với các bộ phận khác trên thế giới. sys là một trong những với một loạt các công cụ mà có ích để tương tác với hệ thống chính nó và sẽ nhập khẩu nó như sys nhập khẩu. Có tài liệu hướng dẫn thêm từ đó, mà bạn có thể đi ở đây, hoặc bạn có thể tìm thấy trên Google bởi googling Python sys. Bạn gõ vào. Các liên kết đầu tiên là có được các tài liệu trong Python 2, liên kết thứ hai sẽ là tài liệu Python 3. Và nếu chúng tôi đã viết ra một tập tin mà nhìn như this-- Nếu nói riêng, chúng tôi nhìn vào hoạt động trên đối số dòng lệnh, như chúng ta đã học để làm rất sớm trong lớp này. Đây không phải là khó khăn. Bạn có thể nhận ra argv, đó là một trong những điều mà được thực hiện bởi sys. Nó không được xây dựng trong các gói cơ bản, nhưng một lần nữa, bạn có thể mở rộng nó bằng cách nhập khẩu mà chức năng từ sys. Bạn sẽ gọi nó là sys. bất cứ điều gì. Ở đây có argv. Có thực sự không có argc trong sys, bởi vì bạn có thể có được nó một cách dễ dàng bằng cách gọi len. Chúng tôi sau đó in ra mà ra, sau đó chúng tôi chạy trên echo-args.py thiết bị đầu cuối của chúng tôi. Chúng tôi nhận lại một mảng, mà là đối số đầu tiên này. Một lần nữa, đây là argv 0, đó là tên của điều đó được gọi tới. Nếu chúng ta gọi nó bằng thêm lập luận, chúng tôi muốn có được những người trở lại. Đây là một cách để nhận được đối số dòng lệnh. Nếu bạn muốn cờ nơi bạn bật điều cụ thể trên hoặc override một mặc định cụ thể, argparse là bạn của bạn. Và một lần nữa bạn tìm thấy trực tuyến tại python argparse tại Google. Có một vài tiện ích module mà bạn thấy mình sử dụng và một lần nữa, nếu bạn dành thời gian bất kỳ của ngôn ngữ này nhập khẩu jsons cho đọc trong và ngoài json tập tin, không phải là phức tạp. Bạn mở một tập tin, bạn gọi json.load trên tập tin đó và bạn nhận lại một điều. Điều đó là gì? Đó là một đối tượng JSON. Nơi json đó có mảng, Python có các mảng. Nơi json có mảng kết hợp, Python từ điển, dây, và số, và như vậy. Bạn muốn đổ mà ra, bạn có mở ra một tập tin mới, bạn gọi bãi chứa, và tải trọng và bãi để đi vào và ra khỏi chuỗi. Tương tự như vậy, dưa được gọi là về cơ bản trong cùng một giao diện. Nó hơi hữu ích hơn nếu bạn đang bán phá giá đối tượng Python. Vì vậy, nếu bạn đã bao giờ muốn để tiết kiệm một phiên bản của tình trạng hiện tại của một biến cho một tương lai chạy chương trình của bạn, pickle là Python thư viện để làm điều đó. Nếu bạn có bất kỳ loại biến có thể được viết ra trong các từ như và các nhân vật và bytes-- như từ điển này, chúng ta có thể viết ra, chúng tôi có thể viết nó xuống như như một đối tượng JSON, đó là nghĩa là những nhân vật này. Và sau đó nó sẽ rất dễ dàng cho một con người để mở nó up-- mở lên và đọc nó. Nếu chúng tôi không đặc biệt quan tâm đến người đọc nó, chúng ta có thể gói thậm chí hiệu quả hơn vào hình thức mà sau này có thể được giải nén hoặc sau này có thể bị thổi phồng. Và điều này giúp tiết kiệm 80% không gian mà đối tượng của bạn có thể mất nếu bạn đã viết chúng ra longhand. Bạn gọi dưa rất nhiều cùng way-- dump, tải, và sau đó bạn sẽ có được những thứ của bạn trở lại. Vì vậy, nếu bạn đang viết rất chương trình Python ngắn muốn để tiết kiệm nước, và sau đó đọc chúng lại sau đó, mọi thứ như thế này là bạn của bạn. Mà bạn có thể rất dễ dàng đổ chúng như JSON. Hầu hết các đối tượng Python có thể đổ ra json nếu có bất kỳ hy vọng rằng cấu trúc họ có thể được biểu diễn theo cách đó. Đây chỉ là đỉnh của tảng băng trôi trên mô-đun đó là hữu ích. Vì vậy, sys, os, đa, được loại workhorses cơ bản cho những thứ chúng ta cần phải tương tác với os hệ thống tập tin., như os.isfile, os.isdirectory, os.makefile, đây là những người bạn của bạn. Nếu bạn muốn tương tác với một kiểu tập tin cụ thể, json, dưa, csv. Nếu bạn muốn tương tác với web trang, urllib để nhận http trang. bs4-- BeautifulSoup-- đó là một phân tích cú pháp tuyệt vời cho html. Bạn chạy nó trên một html và bạn được đối tượng mảng lồng nhau này bây giờ, mà bạn có thể duyệt qua lookin, với như chỉ cần tìm kiếm nếu, là, trong, mà là tuyệt vời. Có một loạt các gói cho running-- để làm những điều đặc biệt mathy. Vì vậy, nếu bạn muốn nhân lên, đảo ngược, biến đổi ma trận, numpy được sử dụng bởi tất cả mọi người trên thế giới cho rằng. scipy là hữu ích hơn công cụ theo hướng đó. học máy sklearn--, xử lý ngôn ngữ tự nhiên, siêu công cụ hữu ích, được thực hiện trong Python tất cả các thời gian. Và một lần nữa, có hơi còn để write-- xin lỗi, mất một chút thời gian để chạy, nhưng lý do mà các kỹ sư thực có xu hướng sử dụng Python là bởi vì bạn có xu hướng bị chặn trên bạn viết mã, thay hơn máy tính của bạn chạy mã. Vì vậy, nếu bạn đang đi để viết một chương trình, trong đó rất nhiều người khác đang sử dụng mãi mãi, như Linux, bạn có thể viết nó trong C. Nếu bạn là sẽ viết một công cụ tính toán, bạn có thể viết bằng Python nếu bạn cần để thay đổi nó mỗi vài tháng. Một số người sẽ viết nó trong C vì họ như thế. Vì vậy, chúng tôi đã nhìn thấy sys nhập khẩu như một cách để nhận được những điều nhận được module vào chương trình của bạn. Bạn cũng có thể nhập nó như biệt hiệu, nếu bạn muốn. Một lần nữa đa là một nỗi đau để gõ từng thời điểm, vì vậy nhập khẩu là mp và sau đó bất cứ lúc nào bạn sử dụng nó trong các chương trình, bạn sẽ nói mp.process, hoặc những gì có bạn. Nếu bạn muốn nhập khẩu chỉ có một điều duy nhất, vì vậy urllib có một điều được gọi là yêu cầu, vì vậy bạn chỉ có thể nhập khẩu đó. Sau đó, bạn sẽ không gọi nó là urllib.request, nhưng chỉ theo yêu cầu bởi bản thân. Và bạn có thể nhập tất cả mọi thứ từ một mô-đun nếu bạn muốn. Điều này đôi khi không phải là một idea-- tốt điều này thường không phải là một ý tưởng tốt, thực sự. Bởi vì bạn very-- vì nếu có chuyện gì trong modul đó có một tên mà bạn muốn sử dụng ở một nơi khác trong chương trình của bạn, bạn có thể không. Và nó không phải luôn luôn rõ ràng mà đó là trường hợp. Để đảm bảo rằng những gì bạn đang làm là an toàn, bạn cần mở module và xem tất cả trong những cái tên mà kết thúc trong there-- tất cả các chức năng, tất cả các biến sống trong modul đó, bởi vì bạn đang mang tất cả chúng vào không gian tên địa phương của bạn. Vì vậy, người làm điều này. Nó thường được khuyến cáo rằng bạn không làm điều này. Nhưng người làm điều này tất cả thời gian bởi vì chúng lười biếng và không muốn gõ ra mp. bất cứ điều gì, bao giờ hết. Tất cả điều này nói về các mô-đun mang cho tôi xung quanh để một cuộc nói chuyện ngắn vào cách bạn thiết kế các chương trình trong Python. Bước đầu tiên là để kiểm tra xem bất cứ ai khác đã làm được điều này, hoặc thực hiện 90% trong những điều. Rất có thể là họ có thể có, và bạn nên đi có được điều họ và chạy đó. Hoặc viết một wrapper xung quanh nó để thích ứng với nó để mục đích của bạn. Chỉ sau khi có thất bại mà bạn muốn sau đó đi vào và bắt đầu suy nghĩ về write-- làm thế nào bạn sẽ đặt điều này lại với nhau. Có rất nhiều công cụ ra khỏi đó, và đó là một trong những hữu ích nhất điều về Python. Cũng giống như các ngôn ngữ thanh lịch, các ngôn ngữ là dễ dàng để sử dụng, nhưng cũng bởi vì nó rất thanh lịch và dễ sử dụng, người đã được sử dụng nó cho một thời gian dài và có rất nhiều thứ ra khỏi đó mà bạn có thể khai thác để sử dụng riêng của bạn. Vì vậy, nguyên tắc cuối cùng của Python là, ai đó khác đã viết sẵn một mô-đun cho rằng, người khác có đã có lẽ được viết một thư viện cho điều đó. Trước khi bạn cố gắng làm một điều, nhìn để xem nếu nó được thực hiện. Nó không phải là khó. Tất cả các mô-đun mà tôi đưa lên trước, có lẽ với một ngoại lệ, cài đặt sẵn trong mỗi cài đặt Python tiêu chuẩn. Và như vậy với một cuộc gọi đến nhập khẩu bất cứ điều gì, bạn có tất cả các chức năng đó trong tầm tay của bạn. Bắt đầu để kết thúc này nói chuyện, có một vài điều rằng tôi đã rời như hộp đen và loại che đậy, và có một vài màu trắng nằm mà tôi đã nói rằng, vì lợi ích của sự trung thực, Tôi sẽ ít nhất là tại thời điểm ở đây, ngay cả khi tôi sẽ không đi siêu sâu vào tất cả chúng và giải thích kỹ thuật của họ. Rất nhiều trong những điều mà tôi đã gọi là ma thuật là những gì người khác sẽ gọi lập trinh Hương đôi tượng. Vì vậy, có rất nhiều things-- để biến là rất thường xuyên không byte đơn giản ngồi trong, bộ nhớ, nhưng rất phức tạp các đối tượng có nội nhà nước về chức năng và rất nhiều biến của ẩn, rất nhiều chức năng ẩn, cho phép bạn biến chúng thành chuỗi, cho phép bạn duyệt qua chúng. Và nếu bạn đang writing-- và vì lý do họ có tất cả các chức năng phong phú này là vì people-- các kiến ​​trúc sư của language-- đã đi thông qua và cho mỗi tiêu chuẩn đối tượng, đưa vào các chức năng để nói điều này là cách này là làm thế nào điều này sẽ hoạt động nếu ai đó muốn lặp trên nó. Vì vậy, tất cả mọi thứ mà ai đó có thể có thể muốn để lặp qua, đã viết trong luận lý tay vào cách bạn phải lặp trên đối tượng đó. Tất cả mọi thứ mà bạn có thể muốn bán phá giá vào một chuỗi đã lý bằng văn bản. Đây là những chức năng mà bạn gọi nếu bạn muốn để đổ này ra thành một chuỗi. Đây là lý do tại sao bạn có thể gọi len vào những thứ, điều này là lý do tại sao bạn có thể gọi cho trong, điều này là lý do tại sao bạn có thể gọi nếu ở trên tất cả mọi thứ mà bạn muốn, bởi vì tất cả những người được mang theo người, bí quyết kỹ thuật làm thế nào để làm điều đó. Đây là điều mà tôi siêu sẽ không đi vào. Nhưng đối với điều trong danh sách là một cách tinh tế khác nhau từ C phong cách cho các vòng, và bạn có thể đọc tất cả về điều đó trên internet, nếu bạn quan tâm. Có một mặt tối cho tất cả điều này, mà tôi đã đề cập, do đó, có hai điều. Đầu tiên là các đối tượng này theo định hướng lập trình cho biết thêm rất nhiều nguyên để điều ngẫu nhiên, do đó, bạn kết thúc bằng cách sử dụng bộ nhớ nhiều hơn; bạn kết thúc bằng cách sử dụng nhiều hơn một chút thời gian hơn mức bạn có. Các other-- nhưng hơn mặt tối ngấm ngầm này là, nếu mọi thứ chỉ hành động như bạn muốn chúng mà không cần phải suy nghĩ siêu cứng về việc này nên là một int hay liệu có phải là một float, nó có thể được rằng ở đây bạn sản xuất một int nhưng ở đây bạn nghĩ nhưng họ sẽ always-- xin lỗi, nó có thể được rằng ở đây bạn sản xuất một phao, nhưng khi bạn tới phần thứ hai các chương trình của bạn, bạn đang suy nghĩ, oh tốt, nhưng họ sẽ luôn luôn vượt qua tôi một int. Và nếu họ không, nó có thể mà bạn chen vào một nơi nào đó, nếu bạn cố gắng sử dụng để chỉ số vào một mảng, hoặc những gì có bạn. Vì vậy, một trong những thực những điều hữu ích về C là nó buộc bạn phải suy nghĩ thực sự cứng trước khi bạn thực hiện any-- trước khi bạn mang theo bất kỳ biến vào sự tồn tại, giống như những gì là kiểu của biến này. Và nó sẽ có loại cho tất cả các thời gian. Đây không phải là sự thật Python, và trong thực tế, bạn can-- nếu bạn chỉ loại đi bằng tai, và bạn thực hiện một số quyết định một chiều ở một nơi, và một số quyết định một cách ở nơi khác mà không đặt đủ thứ đằng sau những cảnh ở nơi khác để nắm bắt những điều đúng, bạn có thể nhận được một số lỗi rất lạ. Và các chương trình có thể tiếp tục chạy trong một thời gian rất dài, bởi vì nó làm rất nhiều công việc để nói, cũng điều này có thể hoạt động theo cách này, do đó, tôi sẽ chạy theo cách đó. Và trên thực tế, thực tế là nó đẩy chuyển qua rất nhiều lỗi nhỏ có nghĩa là, thường khi một lỗi thực sự là xấu và bạn thực sự muốn sửa chữa nó, nó kết thúc dặm away-- chương trình kết thúc dừng dặm từ khi bạn có lỗi lầm của mình. Và do đó, có một điều mà chúng tôi muốn chương trình để làm, có một điều sometimes-- mà chúng tôi muốn chương trình để làm gì khi chúng ta đang tháo gỡ là thất bại lớn và thất bại rất một cách nhanh chóng khi có điều gì sai trái. Python là rất xấu tại đó. Python là rất tốt tại không thất bại và lăn về phía trước thông qua những điều không mong muốn. Vì vậy, đây là hữu ích cho khi bạn đang viết một chương trình nhỏ. Khi bạn trở nên phức tạp lỗi đôi khi nó mất một thời gian dài để trêu chọc chúng ra. Vì vậy, có một mặt tối cho tất cả điều này, giống như nó chỉ hoạt động. Nó chỉ hoạt động như bạn mong đợi nó đến. Trừ khi nó không, bạn kết thúc lên ở một nơi hoàn toàn khác nhau và cố gắng tìm ra nơi nó đã được rằng bạn đã đi sai. Thu gom rác thải is-- vậy một điều mà bạn sẽ thấy là một trong những điều mà Tôi đã đưa vào existence-- các mảng, các từ điển, các các đối tượng, các files-- không bao giờ được giải phóng. Không có cuộc gọi đến miễn phí trong bất kỳ buổi trò chuyện này. Và đó vào C-side, vì chúng tôi chẳng bao giờ gặp những việc đó. Nhưng trong Python-side, không có một miễn phí. Mọi thứ trở nên tự động giải phóng khi Python nghĩ rằng bạn đang không nhìn vào chúng. Nó thực sự tốt không giải phóng những điều mà bạn vẫn có thể được xem xét, nhưng điều này có nghĩa rằng nếu bạn đã sẽ phân bổ điều lớn này, và bạn giống như, oh Tôi đang thực hiện với nó bây giờ, đó là rất khó để nói Python rằng bạn đang thực hiện với nó bây giờ. Đôi khi bạn có thể thiết lập biến mà không phải ai, và sau đó hy vọng rằng cuối cùng thu gom rác đi qua và làm sạch nó ra. Nhưng một lần nữa, bạn không có kiểm soát đó. Và một trong những lý do mà mọi người sử dụng C cho hiệu năng thực sự những điều quan trọng, là khả năng này để thực sự biết khi nào nhớ được cấp phát và khi nó được giải thoát, và có rất nhiều kiểm soát hơn nói, Tôi đang sử dụng không có bộ nhớ nhiều hơn tôi cần. Mà là một cái gì đó Python là không tuyệt vời tại. Đung Tôi có thể hỏi bạn một câu hỏi? Bạn đã có ý nghĩa gì bởi không lớn tiếng? ROSS RHEINGANS-YOO: Vì vậy, nếu cái gì đang xảy ra sai và bạn đang ở trong gỡ lỗi chế độ, bạn sẽ rất thường xuyên muốn chương trình của bạn để cho bạn biết nơi chính xác nó đi sai, và không chỉ âm thầm dừng chạy. Nhưng bạn đã thực sự nó để in ra tất cả các loại thông tin về như thế, đây là này. Điều này đã xảy ra Nếu bạn đang in một wen-- nếu bạn đang chạy một server-- web Đung [Không nghe thấy] ROSS RHEINGANS-YOO: Yeah, nếu bạn đang chạy một máy chủ web, nó đôi khi xấu nếu bạn luôn luôn loại bỏ sai sót, và bạn đang nói, tốt mà không làm việc. Tôi sẽ ngừng. Tôi chỉ cần đi để bỏ qua nó và tiếp tục đi về. Bởi vì sau đó bạn có thể nhận được trong hàng trăm những sai sót và không nhìn thấy chúng. Nó chắc chắn sẽ có ích cho mục đích gỡ lỗi nếu mỗi khi máy chủ web của bạn được thực hiện một lỗi, bạn đã có hồ sơ bền đó. Có lẽ thậm chí bạn muốn chương trình dừng lại, do đó, những hồ sơ không được chôn dưới điều. Nhưng một lần nữa, đó là trong chế độ gỡ lỗi. Thường thì trong phương thức sản xuất, các thế giới là một chút khác nhau. Và trong kịch bản nhỏ mà tôi đang chạy, nơi điều mà tôi nói để làm có thể là chỉ một chút off từ những gì tôi muốn nó làm, sau đó sắp xếp đẩy qua lỗi này là một cái gì đó bạn có thể muốn. Và trong những trường hợp chắc chắn, Python thực sự kiếm được bắt đầu của nó. Điều cuối cùng mà tôi đã không nói chuyện trong this-- rằng tôi đã không nói chuyện về nhưng có thể được thực sự phẩn nộ đầu tiên Hiện bạn có một trong các lỗi này, và lần thứ hai và thứ ba và thứ tư Hiện bạn có một trong các lỗi này. Python, tôi đã đề cập mà nó sử dụng không gian trắng để cho bạn biết mức độ thụt đầu dòng và những gì chức năng block bạn đang ở, nó xử lý các tab và không gian khác nhau. Vì vậy, nếu bạn tab hơn bốn, và sau đó dòng tiếp theo có bốn không gian, ngay cả khi chúng hiển thị như là các cùng một số tiền trong trình soạn thảo của bạn, Python không đối xử với họ như vậy. Trong thực tế, Python đối xử với các tab và không gian như dầu và nước. Họ là những thứ chỉ khác nhau. Không có đặc biệt chiều dài một tab là, vì vậy nó không giống như một tab bằng 8 không gian, và do đó bạn sẽ nhận được xung quanh nó theo cách đó. Giống như khi nó nói, những gì mức độ của không gian màu trắng tôi đang ở, nó thực sự là tìm kiếm một mô hình không gian và các tab. Và vì vậy, cách tốt nhất để đối phó với điều này là luôn luôn sử dụng các không gian tất cả các thời gian. Và trên thực tế, trong Cloud9 IDE và CS50 IDE, chèn phím Tab của bạn bốn không gian trong thay vì của một tab, mà là siêu hữu ích. Mặc dù một lần nữa, nếu bạn đã viết một Python Chương trình với các tab đó sẽ được sử dụng tốt, nó chỉ là nếu ai đó đã đi vào và cố gắng thêm một dòng duy nhất cho chương trình của bạn mà có bốn không gian cho mỗi tab, nó sẽ phá vỡ. Và nó sẽ phá vỡ một cách mà thực sự là không nhìn thấy được. Mặc dù các lỗi thực tế tin rằng nó ném đã làm với mới thụt không mong đợi ở đây, or-- nếu nó nói về indents và có vẻ như nó là sai, nó có thể là vì có một vấn đề tab và không gian. Chúng tôi vẫn đang phẩn nộ để debug. Toàn bộ lớn nhất trong nói chuyện này, mà tôi đã không có được vì nó thực sự một phức tạp, chủ đề tế nhị, và không cần thiết phải làm bất cứ trong những điều chúng tôi đã làm cho đến nay, là một khái niệm gọi là các bộ. Họ đang có nhiều như mảng mà bạn không thể sửa đổi. Họ có được sử dụng trên khắp nơi vì họ là hữu ích cho rất nhiều điều rằng mảng là không hữu ích cho. Nhưng nếu bạn muốn làm một mảng, và sau đó hứa hẹn những thông dịch viên mà bạn sẽ không bao giờ muốn thay đổi đó thing-- trên thực tế, nếu bạn muốn thay đổi, bạn sẽ làm cho một cái mới với các mới giá trị trong it-- đó là các bộ. Thay vì sản xuất chúng với dấu ngoặc vuông, bạn sản xuất chúng với dấu ngoặc tròn. Tại sao bạn sẽ sử dụng những điều này, là một chút của một câu hỏi. . Điều duy nhất mà tôi sẽ nói về điều đó là bạn có thể sử dụng các bộ như chỉ số cho từ điển. Bạn không thể sử dụng các mảng như chỉ số cho từ điển. Và tại sao, một lần nữa, kỹ thuật và Tôi sẽ không để chạy vào nó. Các pset rằng tôi đã không đụng trên trong buổi nói chuyện này là pset6. Vì vậy, đây là cách bạn 'd thực hiện a-- đây làm thế nào bạn sẽ thực hiện pset6 trong Python. Giữ trong tâm trí các Python chu trình thiết kế, điều đầu tiên mà bạn làm khi bạn đang viết chương trình là kiểm tra để xem nếu ai đó được thực hiện nó rồi. Trong thực tế, nếu bạn muốn để serve-- Apache 50 làm khoảng này, ngoại trừ nó không đi tiêu chuẩn được cài đặt trên các máy Linux. Python có, và Python máy chủ http đơn giản nào là tốt. Nếu bạn đã từng vào một máy Linux, hoặc bên ngoài Cloud9 IDE của CS50 và bạn muốn phục vụ hiện nay thư mục vào một cổng đặc biệt, python-m SimpleHTTPServer cảng phục vụ đó. Bạn cũng có thể nhập khẩu các máy chủ http đơn giản và nó có rất nhiều chức năng nếu bạn muốn tùy chỉnh nó, hoặc thay đổi nó, hoặc đang chạy it-- khai thác nó để chạy các dịch vụ máy chủ của riêng bạn. Vì vậy, đó là Python trong một nutshell. Và điều này đã được CS50. Cảm ơn bạn.